Java中的私有IP

时间:2012-05-04 18:31:15

标签: java sockets

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

谢谢!

2 个答案:

答案 0 :(得分:8)

简单的答案很简单:你不能。

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

答案 1 :(得分:2)

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

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

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