Java:检查给定的IP和端口是否是代理服务器

标签 java sockets proxy ip

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/

相关文章:

java - 我可以在没有相对路径的情况下在project.ecore中引用java.ecore吗?但使用模块引用代替?

java - 如何显示多个对象形式的错误 - Play Framework 2 with Java

java - java.lang.reflect.Method 中的 `4161` 修饰符是什么意思

java - 接口(interface)和类中声明的常量之间的区别?

node.js - 如何从socket.io服务器向特定客户端发送请求?

c# - 发送 HTTP 到本地 FiddlerCore

java - ObjectInputStream 文件结束异常忽略打印语句

java - 发送到套接字时 Kotlin java.io.NotSerializedException

curl - cURL NTLM代理授权

.net - 如何避免由于 2x 反向代理网络中未关闭套接字而导致端口耗尽?