5

我需要在我的程序中以编程方式确定路由器 NAT 类型。我确实查看了一些与 STUN 相关的答案和关于 SO 的 UPnP 相关信息。但没有得到任何确定的答案。

我查看了 STUN RFC (rfc 5389),它没有指定如何确定 NAT 类型。它确实提到它的先前版本(RFC 3489)确实提供了确定 NAT 类型的机制。但也提到

此外。经典的 STUN 用于分类 NAT 类型的算法被发现是错误的,因为许多 NAT 并没有完全适合那里定义的类型。

鉴于上述情况,您能否就我应该如何在我的软件中确定路由器 NAT 类型提出建议。此外,既然 RFC 3489 已经过时,还有其他方法吗?

提前致谢。

4

1 回答 1

6

RFC 3489 被分成三个不同的 RFC:

RFC 5389 - 基本 STUN 协议。STUN 绑定请求和绑定响应的基本协议与 RFC 3489 基本相同。协议标头会使用一个神奇的 cookie 进行更新,该 cookie 占据了一些事务 id 字段。一些 STUN 属性被重新定义。添加了一些新的(特别是 - XOR_MAPPED_ADDRESS)。对 STUN 身份验证的完成方式进行了一些更改。NAT 行为和分类讨论移至 RFC 5780。

RFC 5780 - “使用 STUN 的 Nat 行为发现”。对 NAT 类型发现的基本更改是将 NAT 端口映射行为与 NAT 过滤行为区分开来。而 RFC 3489 将尝试将 NAT 分类为几个桶之一(“锥形”、“端口受限”、“对称”)——这对于描述 NAT 来说太笼统了。

RFC 5769 - 只是概述了几种不同 STUN 消息类型的十六进制转储的样子。

出于好奇,我想知道您的应用程序是否在 NAT 后面运行很有用。但是知道 NAT 的行为会如何影响您的代码路径呢?

无耻插件 - 使用我托管在 GitHub 上的 STUN 服务器代码

于 2011-12-22T11:38:43.397 回答