出口 IP 要在目标端测量。代理列表中的地址是客户端联系的监听端;NAT、路由或另一个出站跳点,都可能让目标看到不同的源地址。

使用同一个 IP 查询端点,比较直连与经过代理的结果。下面是一个快速的公开示例:

curl --noproxy '*' --connect-timeout 5 --max-time 15 https://httpbin.org/ip
curl --proxy http://203.0.113.10:8080 --noproxy '' --connect-timeout 5 --max-time 15 https://httpbin.org/ip

把文档示例代理地址换成实际端点;如果选自HTTP 代理列表,要分开记录监听地址和观测到的出口地址。第一条请求在允许直连的前提下绕过代理;第二条清除绕过规则并选择代理。查询服务会收到两次请求,因此不要携带私人数据、Cookie 或令牌。

看返回的地址,不要只看 HTTP 200。符合预期的不同地址,可以支持这次请求确实走了对应路线的判断。若两次结果相同,先检查绕过规则和配置,再判断列表条目是否不实。

先弄清 IP 查询器测量的是什么

httpbin 的 origin 结果在存在 X-Forwarded-For 时可能使用它,因此返回的可能是地址链,而非原始 socket 对端地址。这在明文 HTTP 转发测试中尤其值得注意。需要精确结果时,最好使用自己控制的查询器:在明确的网络边界记录真实连接对端,只信任由自有基础设施提供并验证的转发头。

curl 已经知道的那个地址

curl --proxy http://203.0.113.10:8080 --noproxy '' --output /dev/null --write-out 'peer=%{remote_ip}\n' https://example.com/

remote_ip 标识 curl 的连接对端;在这个例子中通常就是 HTTP 代理端点。它能帮助确认 curl 连到了哪里,却看不到代理向外连接时的源地址。后一个问题要由目标端结果回答。

还要在真正使用代理的应用中重复检查。curl 请求成功,不会替浏览器完成配置;配置文件、扩展、绕过规则,以及忽略系统设置的应用,都可能选择不同路线。如果关心位置,查询观测到的出口地址,并把端点和出口一起保存在结果中。

相关文章