【发布时间】:2014-12-13 23:03:45
【问题描述】:
是否可以在 java 中检查给定的带有端口的 ip 是否是代理服务器?
我可以使用套接字检查给定端口是否打开。
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ip, port), 5000);
如何判断是不是代理服务器?
【问题讨论】:
是否可以在 java 中检查给定的带有端口的 ip 是否是代理服务器?
我可以使用套接字检查给定端口是否打开。
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ip, port), 5000);
如何判断是不是代理服务器?
【问题讨论】:
没有直接的方法来检测 IP 地址是否在代理后面,因为代理可以选择是否发送 X-Forwarded-For 标头(其中包含原始 IP)。
不发送此标头或在日志中记录原始 IP 的代理称为“匿名”代理。在您提到的情况下,您使用的代理可能将此标头转发到您正在访问的端点,因此您的连接没有匿名。
有多种方法可以检测您的流量是否来自代理来源。两个简单的是:
还有其他方法,可能需要服务器上的额外智能,可能是关联来自不同 IP 的连接之间的请求,即查看用户代理标准和请求的时间、cookie、闪存中的 LSO,(您的原因之一是会希望禁用 cookie 和 Flash 播放器以真正匿名化自己)。
【讨论】:
唯一的方法是连接到 IP/端口,向它发送代理请求,然后查看它是否回复代理响应。这是因为 SOCKS 和 HTTP 等代理协议(通过 CONNECT 动词)不提供服务器端问候语来让代理预先识别自己,客户端发送这些协议中的第一个数据包。
【讨论】: