【问题标题】:Java: check if given ip and port is proxy serverJava:检查给定的 ip 和端口是否是代理服务器
【发布时间】:2014-12-13 23:03:45
【问题描述】:

是否可以在 java 中检查给定的带有端口的 ip 是否是代理服务器?

我可以使用套接字检查给定端口是否打开。

Socket socket = new Socket();
socket.connect(new InetSocketAddress(ip, port), 5000);

如何判断是不是代理服务器?

【问题讨论】:

    标签: java sockets proxy ip


    【解决方案1】:

    没有直接的方法来检测 IP 地址是否在代理后面,因为代理可以选择是否发送 X-Forwarded-For 标头(其中包含原始 IP)。

    不发送此标头或在日志中记录原始 IP 的代理称为“匿名”代理。在您提到的情况下,您使用的代理可能将此标头转发到您正在访问的端点,因此您的连接没有匿名。

    有多种方法可以检测您的流量是否来自代理来源。两个简单的是:

    • 存在X-Forwarded-For 标头(或转发的自定义数据 标题)
    • 交叉检查代理或出口中继 (TOR) 的已知 IP

    还有其他方法,可能需要服务器上的额外智能,可能是关联来自不同 IP 的连接之间的请求,即查看用户代理标准和请求的时间、cookie、闪存中的 LSO,(您的原因之一是会希望禁用 cookie 和 Flash 播放器以真正匿名化自己)。

    【讨论】:

    • 谢谢,但我问的是ip是否是代理服务器,而不是ip是否在代理服务器后面。
    【解决方案2】:

    唯一的方法是连接到 IP/端口,向它发送代理请求,然后查看它是否回复代理响应。这是因为 SOCKS 和 HTTP 等代理协议(通过 CONNECT 动词)不提供服务器端问候语来让代理预先识别自己,客户端发送这些协议中的第一个数据包。

    【讨论】:

      猜你喜欢
      • 2021-09-22
      • 1970-01-01
      • 2011-12-27
      • 2012-04-07
      • 2015-01-29
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 2012-02-16
      相关资源
      最近更新 更多