繁体   English   中英

在Java中,当我在代理后面时,网站如何找到我的真实IP地址?

[英]In Java, how can a website find my real IP address while I'm behind a proxy?

我的程序将使用(http)代理发送http请求。 并且代理地址是程序已知的。 但是该程序还希望在代理之后获取当前IP地址。 检索该内容的最佳方法是什么?

唯一的方法是让程序将其IP地址显式发送到请求URL,自定义请求标头或请求正文中编码的服务器。

如果代理处于您的控制之下,则可以对其进行配置,以将客户端的IP地址添加到请求中。 (它可能已经这样做;例如,“ x-forwarded-for”)


另一个问题(通常)是您机器的IP地址很可能是私有IP地址。 不能保证服务器可以访问该IP。 或者,如果服务器使用它来标识客户端,则不能保证IP的唯一性或可靠性。 例如不以某种方式欺骗。


不过,还有一种选择。 如果正确配置服务器和客户端,则服务器可以依靠SSL客户端证书来建立客户端的身份。 但这需要一些注意事项:

  • 用户的防火墙必须允许HTTPS连接。
  • 客户端应用程序(或用户的浏览器)必须在其密钥库中具有客户端证书。
  • 服务器必须能够信任客户端证书并知道其建立的身份(一个人或一台机器?)
  • 建立HTTPS连接时,客户端应用程序必须知道要发送证书。

通过代理发送SSL / TLS时也存在安全问题。 如果不能信任代理,则有可能发生“中间人”攻击。

总而言之,这是一种“困难”的方法。

您可以查询我的IP地址是什么? ,或任何其他可以告诉您的网站(例如google,我的IP地址是什么)。

像这样

String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
    ipAddress = request.getRemoteAddr();
}
System.out.println("ipAddress:" + ipAddress);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM