java中是否可以检查给定的ip和端口是否是代理服务器?
我可以使用套接字检查给定端口是否打开。
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ip, port), 5000);
如何检查是否是代理服务器?
最佳答案
没有直接的方法来检测 IP 地址是否位于代理后面,因为代理可以选择是否发送 X-Forwarded-For header (其中包含原始 IP)。
不发送此 header 或在日志中记录原始 IP 的代理被称为“匿名”代理。在您提到的情况下,您使用的代理可能会将此 header 转发到您正在访问的端点,因此您的连接不会匿名。
有多种方法可以检测您的流量是否来自代理。两个简单的方法是:
- X-Forwarded-For 的存在 header (或转发中的自定义数据 标题)
- 交叉检查代理或退出中继 (TOR) 的已知 IP
还有其他方法,可能需要服务器上的额外智能,也许可以将来自不同 IP 的连接之间的请求关联起来,即查看用户代理标准和请求时间、cookie、闪存中的 LSO(这是您的原因之一)希望禁用 cookie 和 Flash 播放器才能真正匿名)。
关于Java:检查给定的IP和端口是否是代理服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26440670/