首页| 论坛| 搜索| 消息
主题:常见问题的解决方法 之 网络全攻略....
回帖:Radmin服务端保持连接不断问题分析与解决





1、问题描述


Radmin是一个绝佳的远程控制软件,用来做跳板的后门再好不过了,不过每次连过跳板后,察看跳板连线,可以仍然看见我们和跳板上Radmin的连接,只不过显示为TIME_WAIT,且一直这样。


Proto Local Address Foreign Address State


TCP 0.0.0.0:135 0.0.0.0:0 LISTENING


TCP 0.0.0.0:445 0.0.0.0:0 LISTENING


TCP 0.0.0.0:1030 0.0.0.0:0 LISTENING


TCP 127.0.0.1:1031 0.0.0.0:0 LISTENING


TCP 192.168.11.1:139 0.0.0.0:0 LISTENING


TCP 192.168.72.1:139 0.0.0.0:0 LISTENING


TCP 192.168.168.220:1030 192.168.168.221:1034 TIME_WAIT


UDP 0.0.0.0:445 *:*


UDP 0.0.0.0:1026 *:*


UDP 127.0.0.1:123 *:*


UDP 127.0.0.1:1900 *:*


UDP 192.168.11.1:123 *:*


UDP 192.168.11.1:137 *:*


UDP 192.168.11.1:138 *:*


UDP 192.168.11.1:1900 *:*


UDP 192.168.72.1:123 *:*


UDP 192.168.72.1:137 *:*


UDP 192.168.72.1:138 *:*


UDP 192.168.72.1:1900 *:*


UDP 192.168.168.220:123 *:*


UDP 192.168.168.220:1900 *:*


2、问题分析


初步猜测应该是setsocketopt设置超时有问题,可能是设置了无限超时?


调试Radmin服务端,下断点在setsocketopt,结果如下:


第一次断下来


71A42E30 > 8BFF MOV EDI,EDI


71A42E32 55 PUSH EBP


71A42E33 8BEC MOV EBP,ESP


71A42E35 837D 0C 00 CMP DWORD PTR SS:,0


71A42E39 0F84 25010000 JE WSOCK32.71A42F64


71A42E3F 8B45 10 MOV EAX,DWORD PTR SS:


71A42E42 837D 0C 06 CMP DWORD PTR SS:,6


71A42E46 8B4D 14 MOV ECX,DWORD PTR SS:


71A42E49 74 75 JE SHORT WSOCK32.71A42EC0


71A42E4B FF75 18 PUSH DWORD PTR SS:


71A42E4E 51 PUSH ECX


71A42E4F 50 PUSH EAX


71A42E50 FF75 0C PUSH DWORD PTR SS:


71A42E53 FF75 08 PUSH DWORD PTR SS:


71A42E56 E8 09000000 CALL


71A42E5B 5D POP EBP


71A42E5C C2 1400 RETN 14


71A42E5F 90 NOP


71A42E60 90 NOP


71A42E61 90 NOP


71A42E62 90 NOP


71A42E63 90 NOP


71A42E64 - FF25 0010A471 JMP DWORD PTR DS:[; WS2_32.setsockopt


察看堆栈:


0012F808 0096D367 /CALL 到 setsockopt 来自 0096D362


0012F80C 0000007C |Socket = 7C


0012F810 0000FFFF |Level = SOL_SOCKET


0012F814 00000080 |Option = SO_LINGER


0012F818 0012F844 |Data = 0012F844


0012F81C 00000004 \DataSize = 4


0012F820 0000FFFF


0012F824 0012F84C


0012F828 /0012F850


0012F82C |009652F2 返回到 009652F2 来自 0096D340


0012F830 |00000080


0012F834 |0012F844


0012F838 |00000004


0012F83C |0012F870


0012F840 |001D0406


0012F844 |00010001


0012F848 |0012F870


0012F84C |0000007C


0012F850 ]0012F884


可以看到,它设置了SO_LINGER选项,值为0x00010001


第二次断点:


71A42E30 > 8BFF MOV EDI,EDI


71A42E32 55 PUSH EBP


71A42E33 8BEC MOV EBP,ESP


71A42E35 837D 0C 00 CMP DWORD PTR SS:,0


71A42E39 0F84 25010000 JE WSOCK32.71A42F64


71A42E3F 8B45 10 MOV EAX,DWORD PTR SS:


71A42E42 837D 0C 06 CMP DWORD PTR SS:,6


71A42E46 8B4D 14 MOV ECX,DWORD PTR SS:


71A42E49 74 75 JE SHORT WSOCK32.71A42EC0


71A42E4B FF75 18 PUSH DWORD PTR SS:


71A42E4E 51 PUSH ECX


71A42E4F 50 PUSH EAX


71A42E50 FF75 0C PUSH DWORD PTR SS:


71A42E53 FF75 08 PUSH DWORD PTR SS:


71A42E56 E8 09000000 CALL


71A42E5B 5D POP EBP


71A42E5C C2 1400 RETN 14


堆栈:


0012F80C 0096D367 /CALL 到 setsockopt 来自 0096D362


0012F810 00000078 |Socket = 78


0012F814 0000FFFF |Level = SOL_SOCKET


0012F818 00000080 |Option = SO_LINGER


0012F81C 0012F84C |Data = 0012F84C


0012F820 00000004 \DataSize = 4


0012F824 0000FFFF


0012F828 0012F848


0012F82C /0012F850


0012F830 |00965419 返回到 00965419 来自 0096D340


0012F834 |00000080


0012F838 |0012F84C


0012F83C |00000004


0012F840 |0012F864


0012F844 |0012F870


0012F848 |00000078


0012F84C |00010001


0012F850 ]0012F884


可见第一次与第二次相同


F9,没有下个断点,可见只有这两处,上网搜索SO_LINGER选项,其描述如下:





/* 当连接中断时,需要延迟关闭(linger)以保证所有数据都


   * 被传输,所以需要打开SO_LINGER这个选项 //注:大致意思就是说SO_LINGER选项用来设置当调用closesocket时是否马上关闭socket


   * linger的结构在/usr/include/linux/socket.h中定义://注:这个结构就是SetSocketOpt中的Data的数据结构


   *  struct linger


   *  {


   *   int l_onoff;  /* Linger active */ //低字节,0和非0,用来表示是否延时关闭socket


   *   int l_linger; /* How long to linger */ //高字节,延时的时间数,单位为秒


   *  };


   *  如果l_onoff为0,则延迟关闭特性就被取消。如果非零,则允许套接口延迟关闭。


   *  l_linger字段则指明延迟关闭的时间


   */


更具体的描述如下:


若设置了SO_LINGER(亦即linger结构中的l
下一页 (1/3)
下一楼›:IIS5 HTTP500内部错误解决办法





一.错误表现


ii ..
‹上一楼:QQ五种异常情况及解决方法





QQ五种异常情况及解决方法
(铁臂阿童木)

查看全部回帖(61)
«返回主帖