如何发现给定接口背后的 NAT 类型

4 python java nat discovery

我想发现给定网络接口后面的 NAT(FullCone、Restricted Cone、Port Restricted Cone、Symmetric)的类型。

我测试了不同的工具(http://freshmeat.net/projects/jstun/http://code.google.com/p/boogu/),但它们报告了相同界面的不同结果。

我正在寻找 Python(或其他语言,如果没有其他可用语言,则第二个选择是 Java)的明确答案。

Pet*_*iak 5

我支持@S.Lott 的回答:不可能使用 STUN(或任何其他协议)来 100% 确定您所使用的 NAT 类型。

问题是(正如我最近看到的)NAT 有时可能充当地址相关(对称),有时充当端点独立(完整、受限或端口受限锥)。

考虑一下,地址依赖意味着当您从 NAT 后面的客户端上的一个套接字向两个不同的服务器发送数据包时,NAT 将为每个服务器创建两个自定义公共地址:端口元组。就我而言,这些绑定似乎完全随机,但如果范围很小,有时会发生这些元组实际上是相等的!这混淆了测试。

当时我正在使用这个库,有时它告诉我 NAT 的行为是地址相关的,有时它是端点独立的(两者之间的切换也似乎完全随机,有时在我重新启动设备后发生,有时在一个时间段,...)。

这发生在我与斯洛伐克电信的移动设备上,该公司主要归德国电信所有,所以我认为问题至少会在整个欧洲范围内发生。

我会说这里的规则是这样的:如果 STUN 测试告诉您您在对称 NAT 之后,情况并非如此,但如果它告诉您其他情况,那么您就不能 100% 确定。

最后一个注意事项,检查您的 NAT 相对于 TCP 的行为的一种简单方法是在谷歌中输入“我的 IP 地址是什么”,然后打开前(比如)五页。如果页面是不是你的IP地址一致,你的NAT的行为地址依赖型或地址和端口依赖(对称)。但同样,如果它们确实对应,您就无法确定。


S.L*_*ott 3

http://en.wikipedia.org/wiki/STUN

NAT 设备以多种不同类型的地址和端口映射方案来实现。STUN 不能与所有这些一起正常工作。

这足够确定吗?这只是维基百科的引用,但从这里看来你的请求在物理上是不可能的。