我有一个应用程序,要求共享3G或4G网络接入点(相同公共IP地址)的用户直接通过本地IP地址进行通信,而不是试图遍历他们的全球IP地址,但我的T-移动3G和4G网络上的本地网络地址与大多数路由器上的普通本地IP地址不同--他们从不以192、172或10开头。相反,他们从其他号码开始--例如,我的手机现在说我的私人IP地址是21.48.25.107。当IP地址来自蜂窝网络时,如何判断IP地址是否是本地地址?
我正在为蜂窝应用程序实现对等NAT穿越解决方案。当设备共享公共IP地址时,我避免使用公共IP地址,因为大多数路由器不支持发夹转换。
发夹是一种行为,当NAT设备检测到包的(公共IP地址)目的地实际上是为内部主机(主机B)创建的映射IP地址时,将来自内部网络中的主机(让称为主机A)的包转发回同一内部网络中的其他主机(主机B)。这是NAT的一种理想行为,但不幸的是,并非所有NAT设备都支持这种行为。如果没有这种行为,在同一个NAT背后的两个(内部)主机如果交换它们的公共地址,就无法彼此通信。
这就是为什么如果他们共享公共IP地址,就必须交换和使用本地IP地址。
发布于 2015-07-23 14:47:00
它不会回答您的问题,但可能会满足您的需要:我担心唯一的选择是让所有的对等方在直接连接到Internet的服务器上注册他们的本地IP地址(没有NAT)。然后,每个对等点都可以查询服务器中其他节点的本地IP地址和已翻译的IP地址。如果已翻译的公共IP地址位于相同的范围内(分配在相同的范围内),则可以通过本地IP地址进行直接连接。
当然,有了端到端的IPv6连接,就没有问题了.
发布于 2015-07-23 17:02:22
您无法确定将使用什么本地地址范围,但您可以使用链接本地IPv6地址在本地通信,以防发夹转换不可用。
发布于 2015-12-20 22:26:27
正确的私人地址是众所周知的.偶尔会将地址添加到列表中,但这很少见。
不幸的是,T似乎在使用被劫持的地址空间。21.0.0.0/8分配给"DoD网络信息中心“
检测机器是否在NAT后面非常容易,只需将客户端为连接报告的本地IP (使用getsockname api调用)与服务器为连接报告的远程IP进行比较即可。不管NAT后面使用的本地IP地址是众所周知的私有IP地址、被劫持的IP地址,甚至是合法分配给有关网络的IP地址(有时即使客户端拥有合法的公共IP地址,使用NAT也是有意义的)。
然而,即使两台机器在相同的公共IP后面,也不能保证使用它们的本地地址进行通信是有效的。同样,也不能保证与NAT穿越技术的通信将起作用。
因此,可悲的是,如果您想要可靠的操作,您将不得不实现回退到通过您的服务器进行通信。
https://networkengineering.stackexchange.com/questions/20150
复制相似问题