据我所知,使用 HTTP 代理,将会发送一个包含用户 IP 地址的标头字段。
但是 SOCKS 几乎可以与所有服务和协议兼容,因此不应该有包含实际 IP 地址的这样的标头字段。
但理论上,代理服务器可以检测到请求是在端口 80 上完成的,使用 HTTP 语法等,并手动添加该字段?
答案1
那是不对的。
首先要注意的是HTTP 1.1 数据报根本不包含 IP 地址;该信息位于第 3 层数据报中。HTTP 1.1 标头中与代理相关的唯一字段是身份验证标头,它指示代理是否需要登录。
SOCKS 发生在第 5 层(低于 HTTP,但在 IP 之上),并且涉及在源和目标之间创建一对电路,因此它不只是传递它接收到的数据报;它从第 5 层及以下层完全重新封装它们,以便接收服务器在第 5 层甚至不知道客户端正在使用 SOCKS 代理。该标头在传输过程中被删除,并且第 7 层有效负载被放置在新的传输段中,并放在新的数据包中,然后才能发送到远程目的地。
可以确定通信中是否使用了已知代理,具体取决于IP 地址数据库对于已知代理,但在代理和目的地之间传递的数据报中应该没有明确的证据。
值得注意的是,代理的最终结果因对手而异。拥有基础设施的国家可以看到大量网络,他们很可能能够分辨出你是谁,而他们的能力远远超出了这些论坛的范围。
答案2
代理通常会插入 X-Forwarded-For 标头或其他标识客户端 IP 的标头,但除此之外,通过 HTTP 代理发出时客户端 IP 不会向上游传输,并且上游连接使用代理的 IP 地址作为源。
至于 SOCKS,与http端口的SOCKS连接也可能被http代理拦截或转移(温盖特将此作为选项)。因此,是否插入任何标识客户端的标头将取决于该代理的配置。
但是直接的 SOCKS 无法向对端识别客户端的 IP。
免责声明:我为 Qbik 工作,该公司是 WinGate 的作者