Radmin服务端保持连接不断问题分析与解决

作者:        grassgrass

Email:     kityest@163.com

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:[EBP+C],0

71A42E39    0F84 25010000   JE WSOCK32.71A42F64

71A42E3F    8B45 10         MOV EAX,DWORD PTR SS:[EBP+10]

71A42E42    837D 0C 06      CMP DWORD PTR SS:[EBP+C],6

71A42E46    8B4D 14         MOV ECX,DWORD PTR SS:[EBP+14]

71A42E49    74 75           JE SHORT WSOCK32.71A42EC0

71A42E4B    FF75 18         PUSH DWORD PTR SS:[EBP+18]

71A42E4E    51              PUSH ECX

71A42E4F    50              PUSH EAX

71A42E50    FF75 0C         PUSH DWORD PTR SS:[EBP+C]

71A42E53    FF75 08         PUSH DWORD PTR SS:[EBP+8]

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:[EBP+C],0

71A42E39    0F84 25010000   JE WSOCK32.71A42F64

71A42E3F    8B45 10         MOV EAX,DWORD PTR SS:[EBP+10]

71A42E42    837D 0C 06      CMP DWORD PTR SS:[EBP+C],6

71A42E46    8B4D 14         MOV ECX,DWORD PTR SS:[EBP+14]

71A42E49    74 75           JE SHORT WSOCK32.71A42EC0

71A42E4B    FF75 18         PUSH DWORD PTR SS:[EBP+18]

71A42E4E    51              PUSH ECX

71A42E4F    50              PUSH EAX

71A42E50    FF75 0C         PUSH DWORD PTR SS:[EBP+C]

71A42E53    FF75 08         PUSH DWORD PTR SS:[EBP+8]

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_onoff域设为非零,参见2.4,4.1.7和4.1.21各节),并设置了零超时间隔,则closesocket()不被阻塞立即执行,不论是否有排队数据未发送或未被确认。这种关闭方式称为“强制”或“失效”关闭,因为套接口的虚电路立即被复位,且丢失了未发送的数据。在远端的recv()调用将以WSAECONNRESET出错。

若设置了SO_LINGER并确定了非零的超时间隔,则closesocket()调用阻塞进程,直到所剩数据发送完毕或超时。这种关闭称为“优雅的”关闭。请注意如果套接口置为非阻塞且SO_LINGER设为非零超时,则closesocket()调用将以WSAEWOULDBLOCK错误返回。

若在一个流类套接口上设置了SO_DONTLINGER(也就是说将linger结构的l_onoff域设为零;参见2.4,4.1.7,4.1.21节),则closesocket()调用立即返回。但是,如果可能,排队的数据将在套接口关闭前发送。请注意,在这种情况下WINDOWS套接口实现将在一段不确定的时间内保留套接口以及其他资源,这对于想用所以套接口的应用程序来说有一定影响。

这是网上的解释

主要是影响close socket时的动作

知道了问题的原因,我们就动手修改一下试试

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  |00010100      //原来的00010001表示延时256秒,将延时改为1秒

F9运行,用客户端连接,连上后再断开,察看服务端连线,发现以前总是显示为TIME_WAIT的连接,现在马上消失了,至此问题解决:)

3、Radmin修改

Radmin的保护措施做的还是很不错的,它的真正的执行程序是一个RES资源,主程序只负责将其解压缩到内存中并执行,如果要修改就需要自己解压缩,修改后再自己压缩了放回去,具体怎么做我就不说了:)

提示:如果要重复我一样步骤,直接下setsocketopt是断不下来的,先下jmp eax ,断下来后F8一次,再下setsoketopt断点,好了,就提示这么多了。

阅读(835) | 评论(0) | 转发(0) |

radmin服务器自动关闭,Radmin服务端保持连接不断问题分析与解决相关推荐

  1. 83998 连接服务器出错_服务端 TCP 连接的 TIME_WAIT 问题分析与解决

    民工哥技术之路 写在开头,大概 4 年前,听到运维同学提到 TIME_WAIT 状态的 TCP 连接过多的问题,但是当时没有去细琢磨:最近又听人说起,是一个新手进行压测过程中,遇到的问题,因此,花点时 ...

  2. 服务端返回中文乱码的分析和解决办法

    一.介绍 本文介绍了Controller端,返回json的几个写法和遇到的坑,如遇见中文乱码可以按照下面详细情况介绍换一种方式解决你的问题. 二.前提背景 json格式:FastJson Contro ...

  3. 基础原理系列:服务端 TCP 连接的 TIME_WAIT 问题

    几个方面: 问题描述:什么现象?什么影响? 问题分析 解决方案 底层原理 1.问题描述 模拟高并发的场景,会出现批量的 TIME_WAIT 的 TCP 连接: 短时间后,所有的 TIME_WAIT 全 ...

  4. close wait 过多原因_干货分享!服务端 TCP 连接的 TIME_WAIT 问题分析与解决

    写在开头,大概 4 年前,听到运维同学提到 TIME_WAIT 状态的 TCP 连接过多的问题,但是当时没有去细琢磨:最近又听人说起,是一个新手进行压测过程中,遇到的问题,因此,花点时间,细深究一下. ...

  5. ZooKeeper客户端源码(一)——向服务端建立连接+会话建立+心跳保持长连接

    首发CSDN:徐同学呀,原创不易,转载请注明源链接.我是徐同学,用心输出高质量文章,希望对你有所帮助. 一.从ZooKeeper实例初始化开始 ZooKeeper 提供了原生的客户端库,虽然不好用,但 ...

  6. 客户端与服务端长连接的几种方式

    客户端与服务端长连接的几种方式 前言 一.ajax 轮询 二.long poll 长轮询 三.iframe 长连接 四.WebSocket 前言 在日常 Web 项目中,通常使用的是短连接.即一个 R ...

  7. CSGO社区服搭建服务器架设游戏服务端教程

    CSGO社区服搭建服务器架设游戏服务端教程 我是艾西,上一篇说了搭建CSGO服务器需要准备服务器以及安装好所需要的环境,那么今天说一下CSGO社区私人服务器怎么搭建游戏服务端 搭建CSGO服务器比较简 ...

  8. FTP 编写 2:客户端与服务端的连接

    FTP 编写 2:客户端与服务端的连接     首先编写客户端与服务端能进行简单的连接,这个较为容易:     服务端的编写流程是:启动 Winsock.建立套接字.绑定套接字.监听.接收连接.关闭连 ...

  9. 服务器怎么查服务端数据

    通常情况下,在做性能测试的时候,我们需要关注的点有这些: 服务端处理能力(并发量.qps.响应时间等): 服务端机器性能数据(程序内存占用.cpu占用.网络带宽占用等): 异常请求信息(如服务端返回5 ...

最新文章

  1. python数据分析实训大纲,数据分析大赛考纲:(二)Python数据分析应会部分
  2. 在ChemDraw中输入千分号的方法
  3. 统计一段英文中单词的个数c语言,C语言统计一篇英文短文中单词的个数实例代码...
  4. 只知道java有反射可以说是动态语言,动态链接,早期晚期绑定、虚方法这些概念你知道吗
  5. Deep Exploit:结合机器学习的全自动渗透测试工具
  6. 函数伪代码_Excel常用函数
  7. 两个服务器 文件比较,使用linux的comm命令比较两个已排过序的文件
  8. java关于排版的说法正确是_Java代码规范--排版,命名---以及一个例子
  9. 程序员修炼之道(一)
  10. 蔡学镛:架构师最重视的文档 转
  11. HTTP中的status code什么意思
  12. 联想y7000 Linux显卡驱动,联想Y7000安装显卡驱动
  13. python 16进制转中文_求助~ 16进制数据转不了汉字
  14. Linux HaProxy安装/启动/简单配置教程
  15. SMAA算法详解 - AreaTex
  16. c语言实现计算函数在某点的导数近似值
  17. 新型变色纹身自带传感器,联动手机APP可同时监测血糖、pH值、白蛋白含量
  18. dva是什么游戏_Dva爱你哟 她原来就是韩国少女宋哈娜原型
  19. Hamming Distance (汉明距离)
  20. 学习python的编程语言

热门文章

  1. MemCache和一致性Hash算法讲解
  2. unity3D实现地对空防御
  3. Vulnhub靶场篇:Lampiao 夜车星繁的博客
  4. 权威解读:人工智能时代的分子模拟,这个工具不能少
  5. 局域网固定内网IP地址的方法(亲测有效)
  6. 异地就医联网进展如何?正式签约定点医疗机构已达数百家
  7. phpwechat的使用
  8. 专业函数画图软件Origin
  9. 总结UG编程使用的小技巧
  10. 【Discuz】dz3.2论坛搬家心得