目录
原理
首先说明,这是一个偶然发现的特征,也在尝试找理论依据,我的工作只是尝试让这个特征容易被获取。
这里只能大概描述下原理,SOCKS5\HTTP代理工作在运输层,只会转发部分的TCP包和部分内容,这会让用户在通过代理访问时出现明显的延迟特征。具体可以看通过https握手rtt识别TCP代理(socks5/http)
局限性
- 最多只对socks\http 之类工作在运输层的代理生效
- 同时由于通过延迟去判断,如果代理机器与用户之间的延迟过低也是无法识别的
- 严重依赖网络质量,乱序、重发、丢包都会模糊特征以至于无法判断
- 由于网络波动,有概率会出现误判
使用场景-住宅代理、移动代理检测
面对数据中心代理,目前主流的方案是通过数据ip段收集,端口扫描等方法。而住宅代理,这完美的规避了这些特征。但同时,住宅代理也有其缺陷,比如延迟高,部署难,设备性能低且不可控等问题。可能正因为如此,目前住宅代理、移动代理等服务商提供的接入协议均为易用的SOCKS5\HTTP(S)。
- 用户容易使用
- 易于部署和管理
- 无法从应用层进行识别
demo
proxy guess demo
在你的网站测试
以php为例,如果你希望收到接口更新,可以在评论进行回复。
1. 生成一个token给图片
$token = rand(0,1111).'_'.microtime(1);
2. 页面引入带token的图片
<script>
let image = new Image();
let token = "<?php echo $token?>";
image.src = "https://proxyguess.bjun.tech/proxy_guess.php?token="+token;
</script>
3. 获取结果
通过带token的链接获取结果
$url = 'https://proxyguess.bjun.tech//index.php?token='.$token;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
$ret = curl_exec($ch);
curl_close($ch);
返回的结果:
<pre>{
"guess use proxy": false,
"guess use proxy socre": 0,
"ip": "remote address",
"vpn by mss": false,
"geoip2": "xx",
"you_to_proxy": 0,
"proxy_to_server": 0.015
}</pre>
其他工具测试示例
cmd
// 无代理
curl -L "https://proxyguess.bjun.tech/proxy_guess.php?token=%RANDOM%"
// 有代理 需要修改成自己的代理
curl -L -x http://$USERNAME:$PASSWORD@$PROXYSCRAPE_HOSTNAME "https://bjun.tech/demo/proxy_guess/proxy_guess.php?token=%RANDOM%"
shell
// 无代理
curl -L "https://proxyguess.bjun.tech/proxy_guess.php?token=$RANDOM"
// 有代理
curl -L -x http://$USERNAME:$PASSWORD@$PROXYSCRAPE_HOSTNAME "https://proxyguess.bjun.tech/proxy_guess.php?token=$RANDOM"