ProxyPoolxSocks icon indicating copy to clipboard operation
ProxyPoolxSocks copied to clipboard

师傅有考虑过基于linux的使用epoll替代select么

Open awsl404 opened this issue 1 year ago • 6 comments

在Linux上成功搭建完代理之后,在低并发下使用没有任何问题,但是后续利用Burp做批量Intruder测试时,发现设置100-200的请求数,都会报错,报错信息如下

错误 通过查询相关资料发现是Linux系统本身和select的问题 image 之后在本地修改select为epoll发现能解决linux下高并发的问题,目前测试暂时未发现存在其他问题 代码修改的位置为server.py中的ExchangeData

def ExchangeData(self, client, remote):
        """ 
        交换数据 
        """
        try:
            epoll = select.epoll()
            epoll.register(client.fileno(), select.EPOLLIN)
            epoll.register(remote.fileno(), select.EPOLLIN)
            while True:
                # 等待数据
                events = epoll.poll()
                for fileno, event in events:
                    if fileno == client.fileno():
                        data = client.recv(4096)
                        if not data:
                            break
                        if remote.send(data) <= 0:
                            break
                    elif fileno == remote.fileno():
                        data = remote.recv(4096)
                        if not data:
                            break
                        if client.send(data) <= 0:
                            break
        except Exception as err:
            print(f'{blue}[{self.time}][Client]{red} [-] 客户端:  {self.client_address}  发生错误: {err}{end}')
            self.logdata(f'[{self.time}][Client] [-] 客户端:  {self.client_address}  发生错误: {err}')
            pass

awsl404 avatar Nov 27 '23 03:11 awsl404

对代码不是很熟,改动之后发现会存在并发数量上不去的问题

awsl404 avatar Nov 27 '23 06:11 awsl404

收到

Anyyy111 avatar Nov 27 '23 11:11 Anyyy111

我这边模拟了下burpsuite测试ifconfig.me网站的情况,测试过来客户端和服务端都没出什么问题。 我这里代理的方式是Proxifier代理Burpsuite,再进行Intruder测试: image image image

师傅这边可以贴下操作的方式、过程细节我复刻一下,因为要修改这段代码我需要测试报错的情况,再调试让代码更合理。

Anyyy111 avatar Nov 27 '23 11:11 Anyyy111

测试环境可能存在差异,之前出问题的环境是批量跑现网POC。在先用Fofa提了一批资产,然后根据POC对相关资产做批量测试,代理数量大概在500左右,测试的目标大概在9千左右,由于连通性问题,部分host目标可能无法访问,测试方法是使用的Burp的Intruder模块,直接修改Host即可,burp设置的并发为100、200、300这几种 image image image 服务器那边监听的12000端口,config中代理切换时间为10s,没有开启自动更新代理功能,最开始的端口环境如下 image 其中并发为100的情况下,测试没什么问题,没有出现上述的报错问题。 200并发的情况下,测试出现较多的Broken pipe问题,主要是几个端口引起的,实际上来看,对其他测试没影响 image 但是这个有个小问题,就是这个报错信息会不停地刷新,如果开启了日志记录功能,没多久就会占满磁盘空间,导致运行报错 image 在300并发的情况下,出现了上述的问题,即使在Burp上停止了测试也会不停地刷新这个报错信息: image 此时Burp那边显示的进度大概在2000条左右 image 使用netstat观察端口情况发现存在大量的ESTABLISHED off和TIME_WAIT的状态连接: image 经过一段时间等待之后,再次观察发现基本全是ESTABLISHED off状态的请求,同时日志信息还在不停地报错 image

awsl404 avatar Nov 28 '23 02:11 awsl404

师傅收到

Anyyy111 avatar Nov 29 '23 15:11 Anyyy111

为了更真实模拟师傅的操作,我也去fofa找了一批资产,大概300+,同样的burpsuite配置进行爆破漏洞路径。 (另外师傅这边使用Proxifier去代理bp吗)

Anyyy111/ProxyPoolxSocks/assets/87168243/1b85ffd3-c431-4350-b7b6-776b55f2e06a) image

爆破过来基本都是200状态,服务端挂起的脚本也没问题

image

image

服务端的配置: image

代理的切换速度是3s

不过确实会有连接堵塞造成TIME_WAIT等情况:

image

造成这样的情况估计是有一部分IP无法正常访问,代理服务器已经与服务端建立起连接去访问目标了,但是访问不到连接超时导致堵塞的情况。 因为是100个线程同时去访问,如果目标访问不到则状态显示为ESTABLISHED off ;如果目标可以访问但是超时则状态显示为TIME_WAIT 造成这样的原因有2点: 1.目标URL无法正常访问 2.代理服务器的问题,比如一些代理服务器限制地区,只能在一部分地区正常运行的例子等等

看你netstat -ano的情况 有很多连接无效的样子,我觉得大概率是代理服务器的问题,或者是访问的目标访问不到这两个问题了。另外你可以试试把切换频率改快一些试试,像我这样设置成3s。

我这边系统用的是Kali 看你的截图应该是云服务器的Ubuntu吧,可能这个也有关系 总之我这边测试过来都挺顺利的Orz

师傅可以再看看呢,还有问题可以直接联系我QQ 这样解决也快些。

至于日志冗杂占内存的情况已经收到,过几天会优化这一情况。

Anyyy111 avatar Nov 29 '23 17:11 Anyyy111