ProxyPoolxSocks
ProxyPoolxSocks copied to clipboard
师傅有考虑过基于linux的使用epoll替代select么
在Linux上成功搭建完代理之后,在低并发下使用没有任何问题,但是后续利用Burp做批量Intruder测试时,发现设置100-200的请求数,都会报错,报错信息如下
通过查询相关资料发现是Linux系统本身和select的问题
之后在本地修改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
对代码不是很熟,改动之后发现会存在并发数量上不去的问题
收到
我这边模拟了下burpsuite测试ifconfig.me网站的情况,测试过来客户端和服务端都没出什么问题。
我这里代理的方式是Proxifier代理Burpsuite,再进行Intruder测试:
师傅这边可以贴下操作的方式、过程细节我复刻一下,因为要修改这段代码我需要测试报错的情况,再调试让代码更合理。
测试环境可能存在差异,之前出问题的环境是批量跑现网POC。在先用Fofa提了一批资产,然后根据POC对相关资产做批量测试,代理数量大概在500左右,测试的目标大概在9千左右,由于连通性问题,部分host目标可能无法访问,测试方法是使用的Burp的Intruder模块,直接修改Host即可,burp设置的并发为100、200、300这几种
服务器那边监听的12000端口,config中代理切换时间为10s,没有开启自动更新代理功能,最开始的端口环境如下
其中并发为100的情况下,测试没什么问题,没有出现上述的报错问题。
200并发的情况下,测试出现较多的Broken pipe问题,主要是几个端口引起的,实际上来看,对其他测试没影响
但是这个有个小问题,就是这个报错信息会不停地刷新,如果开启了日志记录功能,没多久就会占满磁盘空间,导致运行报错
在300并发的情况下,出现了上述的问题,即使在Burp上停止了测试也会不停地刷新这个报错信息:
此时Burp那边显示的进度大概在2000条左右
使用netstat观察端口情况发现存在大量的ESTABLISHED off和TIME_WAIT的状态连接:
经过一段时间等待之后,再次观察发现基本全是ESTABLISHED off状态的请求,同时日志信息还在不停地报错
师傅收到
为了更真实模拟师傅的操作,我也去fofa找了一批资产,大概300+,同样的burpsuite配置进行爆破漏洞路径。 (另外师傅这边使用Proxifier去代理bp吗)
Anyyy111/ProxyPoolxSocks/assets/87168243/1b85ffd3-c431-4350-b7b6-776b55f2e06a)
爆破过来基本都是200状态,服务端挂起的脚本也没问题
服务端的配置:
代理的切换速度是3s
不过确实会有连接堵塞造成TIME_WAIT等情况:
造成这样的情况估计是有一部分IP无法正常访问,代理服务器已经与服务端建立起连接去访问目标了,但是访问不到连接超时导致堵塞的情况。 因为是100个线程同时去访问,如果目标访问不到则状态显示为ESTABLISHED off ;如果目标可以访问但是超时则状态显示为TIME_WAIT 造成这样的原因有2点: 1.目标URL无法正常访问 2.代理服务器的问题,比如一些代理服务器限制地区,只能在一部分地区正常运行的例子等等
看你netstat -ano的情况 有很多连接无效的样子,我觉得大概率是代理服务器的问题,或者是访问的目标访问不到这两个问题了。另外你可以试试把切换频率改快一些试试,像我这样设置成3s。
我这边系统用的是Kali 看你的截图应该是云服务器的Ubuntu吧,可能这个也有关系 总之我这边测试过来都挺顺利的Orz
师傅可以再看看呢,还有问题可以直接联系我QQ 这样解决也快些。
至于日志冗杂占内存的情况已经收到,过几天会优化这一情况。