擅长:python、mysql、java
<p>我从@S.Lott那里得到了答案:不可能使用STUN(或任何其他协议)来100%确定您落后于哪种类型的NAT。在</p>
<p>问题是(正如我最近所看到的那样),NAT有时充当<a href="http://tools.ietf.org/html/rfc4787#section-4.1" rel="nofollow">Address-Dependent</a>(对称),有时又充当<a href="http://tools.ietf.org/html/rfc4787#section-4.1" rel="nofollow">Endpoint-Independent</a>(完全、受限或端口受限的圆锥)。在</p>
<p>仔细想想,地址依赖性意味着当你从NAT后面的客户机上的一个套接字向两个不同的服务器发送数据包时,NAT将创建两个自定义的公共服务器地址:端口元组对于每个服务器。在我的例子中,这些绑定看起来是完全随机的,但是如果范围很小,有时这些元组实际上是相等的!这让测试很困惑。在</p>
<p>当时我正在使用<a href="http://www.stunprotocol.org/" rel="nofollow">this library</a>,有时它告诉我NAT的行为与地址有关,有时它与端点无关(两者之间的切换似乎也完全是随机的,有时发生在重新启动设备之后,有时发生在一段时间之后,…)。在</p>
<p>这发生在我身上的移动设备上,<a href="http://en.wikipedia.org/wiki/Slovak_Telekom" rel="nofollow">Slovak Telekom</a>是一家主要由<a href="http://en.wikipedia.org/wiki/Deutsche_Telekom" rel="nofollow">Deutsche Telekom</a>所有的公司,所以我认为问题至少会波及整个欧洲。在</p>
<p>我想说这里的规则是这样的:如果stunt测试告诉你你是在一个对称的NAT后面,而不是这样,但是如果它告诉你,那么你不能100%肯定。在</p>
<p>最后一点,检查NAT相对于TCP的行为的一个简单方法是在google中输入“what is my IP address”,然后首先打开(比如)五个页面。如果页面与您的IP地址不一致,则NAT的行为与地址或端口相关(对称)。但是,如果他们真的一致,你就不能确定。在</p>