如何确保使用公共IP地址将数据包传送到正确的客户端

时间:2012-09-09 06:47:41

标签: java android http sockets ip

所以私有IP地址是 192.168.00~192.168.255.255或10.0.0.0或172.16.0.0~172.31.255.255

如果我接受了一个客户端到我的serversocket,我可以使用socket.getremotesocketaddress()获取客户端的remoteIp地址;但我怀疑我从这种方法获得的IP地址只是公共IP地址,并且必须有多个客户端使用与此相同的公共IP(就像你在访问www.whatismyip网站时看到的那样) .COM)。因此,如果我想确保使用一些唯一标识某个人的IP地址或其他方式将我的数据包发送给合适的人,我该怎么办?

4 个答案:

答案 0 :(得分:2)

我认为你不能以这种方式可靠地识别返回用户的机器。 NAT将用您服务器看到的公共IP地址替换“私有”IP地址。在数据包到达您的服务器时,替代标识符(如MAC address)也将消失。

在应用程序中构建应用程序级别标识(让用户或客户端进行身份验证)或使用不那么独特的上下文标识符的组合,例如:通过browser fingerprinting

答案 1 :(得分:1)

  

如何确保使用公共IP地址将您的pakcet发送到正确的客户端

这个问题没有意义。如果您通过TCP接受连接,则它已连接到唯一的客户端。与该客户端通信所需要做的就是通过该连接发送字节。您无需做任何事情来确保正确交付。

答案 2 :(得分:1)

在我看来,唯一的方法是使用HTTPS而不是HTTP。 HTTP是一种相对较弱的协议;以及相当容易欺骗和窥探的声誉。

答案 3 :(得分:1)

  

因此,如果我想确保使用某些IP地址或其他唯一标识某人的内容将我的数据包发送给合适的人,我该怎么做?

你无法确保这一点。这在技术上是不可能的。

这可以使用各种强加密方案来实现。在应用程序级别,HTTPS将确保提供:

  • 客户端彻底检查服务器提供的证书,
  • 服务器的私钥没有泄露。

在正常情况下,HTTPS服务器无法明确识别客户端计算机。您可以使用客户端证书解决此问题,但这需要花费大量精力进行设置。这篇IBM笔记概述了:

通常的做法是使用普通的HTTPS,结合一些应用程序级方案来验证用户;例如用户名和密码,双因素身份验证,生物识别,令牌生成器等等,等等。


  

但我怀疑我从这种方法获得的IP地址只是公共IP地址,并且必须有多个客户端使用与此相同的公共IP ...

是的。鉴于IPv4空间已经耗尽,这种情况现在越来越普遍。例如,NAT网关允许具有“私有”IP地址的客户端通过NAT网关与外部服务通信。对于外部服务,连接似乎具有NAT网关的IP地址作为客户端地址。服务无法找出“真正的”IP地址是什么,即使有办法,它也无法唯一地识别客户端。