对(ip, port)发送HTTP指定请求,判断HTTP Response是否符合预期,符合预期即初判为代理。
- 发送CONNECT
- 如果返回正确,发送HTTPS请求
- 如果HTTPS请求返回正确,则判定为支持HTTPS代理
- 发送socks connect请求
- 发送HTTP请求
- 响应结果正常,则判定为支持Socks代理
通过代理发送请求到自己的proxyjudge server上,通过http request headers判断代理匿明度即可
打包:
mvn package
JAR 文件: proxyscan-2.0-jar-with-dependencies.jar
启动命令:
java -cp proxyscan-2.0-jar-with-dependencies.jar com.fd.proxyscan.NettyProxyScanner 123.0.0.0 80,1080,1081,3128 1000
参数:
- 123.0.0.0 起始IP
- 80,1080,1081,3128 需要探测的端口
- 1000 TCP最大链接数
其它配置:
- 调整系统ulimit中nofile等参数来支持大并发链接数
- 注意connectTimeout与net.ipv4.tcp_syn_retries参数的配合
- 流量的估算: 一般单个SYN请求/响应包大小为54(14 + 20 + 20)/66(14 + 20 + 32)/74(14 + 20 + 40)等,因为代理量很少忽略正常链接的流量; 假设能有十分之一的请求能够得到RST类响应且不进行SYN重发, 那么流量可以估算=(并发数 * 74 + 并发数 * 54 / 10) * 8 / 1024 (Kb/s)
- 扫描出的代理在不同网断可达性不同
- 稳性代理少,一般代理可用时间短,需要不断扫描且需对已扫描出代理周期性验证可用性
- 扫描出代理会存在误判,需要尝试使用不同的HTTP或者HTTPS请求清除假代理