前言
代理检测,虽然看起来很常见,但是仔细琢磨,还是有不少东西结构
- 代理的作用
- 代理类型: 常见的代理类型
- 代理检测方法: 检测代理所使用的方法,包含对http,https,socks,vpn,tor等
- 其他: 对于代理检测的展望
引言
对于代理,想必不会陌生。然而对于代理的检测,出于对速度和准确率之间的取舍,往往摸不到头。通过对一些论文和目前常见的检测代理方法了解过后,遂做了些总结。
代理类型
HTTP代理
HTTP代理是我们最熟悉的一种方式,一般用于访问网页,一般有内容过滤和缓存等功能。常见的端口有8080,3128,80
HTTPS代理
侧重于对访问有SSL和TLS加密的网站,典型的如VPN,常见的端口443,8443
SOCKS代理
不关心应用层的细节,因此速度会比较快,目前常见的有socks4和socks5两种方式,简单的说就是,socks4具备的,socks5都支持,常见的端口有1080。
TOR
TOR其实侧重的是匿名性,放在此处仅仅做一个补充了解tor.常见的端口有9050,9001,9040
tor组成
tor包含三个节点,有guard node,relay node ,以及exit node
tor原理流程
tor节点一开始会请求一个consensus文档,以获得tor网络的节点是什么样的。而这个文档是由以下几个IP维护的。其文档的具体内容可以通过如下IP访问,路径为
1
/tor/status-vote/current/consensus
其具体的格式解析,可以参考该https://www.cryptolux.org/images/b/bc/Tor_Issues_Thesis_Thill_Fabrice.pdf论文描述。tor客户端在获得这个共识文档后,会随机的选择3个节点作为整个链路。
网桥,是由于国内用户无法直接访问以下这几个IP,通过网桥,绕过GFW的限制,从而获得共识文档。1
2
3
4
5
6
7
8
9
10{ ip = "128.31.0.39", port = "9131"},
{ ip = "86.59.21.38", port = "80" },
{ ip = "194.109.206.212", port = "80" },
{ ip = "82.94.251.203", port = "80" },
{ ip = "131.188.40.189", port = "80"},
{ ip = "193.23.244.244", port = "80"},
{ ip = "208.83.223.34", port = "443" },
{ ip = "171.25.193.9", port = "443" },
{ ip = "154.35.175.225", port = "80" },
{ ip = "199.254.238.52", port = "80" }
流量在Tor之间传输都是加密的形式,而出口节点的信息,则是透明的,除非使用https协议或者其他安全方式。因此,如果在tor网络只使用http协议访问网站,那么你的信息,就可以被别人捕获到。
代理的检测方法
https/http代理检测
最常见的方式是转发,其次对于报文头的一些头信息,可以间接的判断。最常见的比如http_via,remote_ip,x_forworded_for
这些字段,其次一些代理产品,有相应的产品指纹,可以直接获得。对于目标ip,如果其真实操作系统和请求头信息不匹配,也可以认为是代理。依此类推时间,语言,操作系统任何一个不一致,都可以被认为是代理。对于VPN产品信息,有特定的指纹信息,可以通过请求返回的报文判断。
socks代理检测
通过转发的方式,判断是否是代理
Tor检测
tor的检测,可以直接从共识文档获取,因为tor的出口节点ip才是我们想要的,所以直接检测tor出口节点就行了。
此外,tor-browser启动的时候,会在本地开放一个tor-socks端口,通过这个端口也可以间接的判断是否是代理IP.
通用检测方法
通用的方法,就是以IP为单位,比如IP的whois信息,以及DNSBL信息等,都可以推测出。
此外,网上免费代理的名单也可以间接的作为一份黑名单。
其他
然而,对于代理检测,目前最前沿的方式是,通过在客户端添加一个自有协议,通过这个协议来检测访问时延。通过对这个时延的判断,来间接的判断,是否代理。而这个访问的依据是,使用代理会比不使用代理的速度会慢一点,因为一个请求默认会匹配最近的基站,如果使用代理,相当于绕远路的方式,因此可以通过这个方式来检测。
而对于,提高代理检测的速度,以及其他优化的方法,会在下一篇文章中细数。