繁体   English   中英

Java中的私有IP

[英]Private IP in Java

我们当前的系统通过套接字接收连接,我们需要确定连接客户端的私有IP。 目前,我们可以通过connectingSocket.getInetAddress()轻松访问公共IP,但获取私有地址的最佳方法是什么?

谢谢!

简单的答案是直截了当的: 你做不到。

更复杂的答案:如果您可以控制客户端连接到Java套接字的方式(即强制它们通过PROXY使用HTTP),您可以让代理将该信息添加到特殊标头中。 或者,如果使用专有协议,则可以在协议本身上对私有IP进行编码。 但是,没有获得该信息的一般方法。 NAT只会使私有IP地址消失。

期望能够从公共请求获得私有IP是不合逻辑和不安全的。 NAT和代理隐藏私有IP有几个原因,一个是安全性。 此外,您不知道在最终到达您的服务之前,您传入的连接可能会跨越多少级别的NAT或代理或VLAN等。

如果您控制客户端(即:它是您自己的Java客户端等),您可以使用几种不同的技术(可能在标头,有效负载的一部分等)对您的请求中的信息进行编码,但如果它是连接的通用客户端则无法控制该信息。

也许最好的问题是为什么你想要/需要这些信息? 如果它是用于记录或跟踪个人,那么请记住,私有IP可以随时更改(大多数人使用DHCP),并且大多数人没有启用任何类型的DHCP日志记录/历史记录。 因此,追踪通过公共ip-> private ip启动连接的硬件将是一项不可能完成的任务。

暂无
暂无

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

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