-2

所以私有 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

4 回答 4

2

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

在您的应用程序中构建应用程序级别标识(让用户或客户端进行身份验证)或使用不那么唯一的上下文标识符的组合,例如通过浏览器指纹识别

于 2012-09-09T07:12:18.270 回答
1

您如何确保使用公共 IP 地址将您的 pakcet 交付给正确的客户

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

于 2012-09-09T07:13:58.043 回答
1

在我看来,唯一的方法是使用 HTTPS 而不是 HTTP。HTTP是一个比较弱的协议;以蜜蜂相当容易欺骗和监视而闻名。

于 2012-09-09T07:31:05.470 回答
1

因此,如果我想确保我的数据包使用某个 IP 地址或其他唯一标识一个人的东西传递给正确的人,我应该怎么做?

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

可以做的是确保在将数据包交付给错误的人或机器时无法读取数据包。这可以使用各种强加密方案来实现。在应用程序级别,HTTPS 将确保这一点,前提是:

  • 客户端彻底检查服务器提供的证书,并且
  • 服务器的私钥不会泄露。

在正常情况下,HTTPS 服务器没有任何方法可以明确识别客户端计算机。您可以使用客户端证书解决此问题,但这需要大量的设置工作。此 IBM 说明提供了概述:

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


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

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

于 2012-09-09T09:36:08.553 回答