我想使用可用的 STUN 服务器(公共 Stun 服务器)(STUNTMAN)检查 NAT 类型及其行为。我尝试并找到了可以与 STUN 服务器通信以识别 NAT 行为的客户端代码(STUN CLIENT),但全部都是 UDP 格式。根据RFC-5780,我们可以检查 UDP 和 TCP 的映射行为,因此我想使用 TCP 检查相同的行为,并且我已经实现了与 UDP 相同的方式,但两个结果不同。因此,查找 NAT 行为的行为/步骤是否与 UDP 相同还是需要实现其他方式。 任何示例客户端代码也会有所帮助。
STUN/TURN 通过模拟几种不同类型的连接来检查 NAT 类型,并逐步拆分 Full Cone、Restricted NAT、Port Restricted NAT 和 Symmetric NAT。
我们通常使用UDP,因为我们不需要三向握手来建立连接,这可能会混淆NAT类型的判断。所以如果你想使用TCP,你首先需要知道STUN对于UDP是如何一步步检查NAT类型的,并且想想TCP三路握手会发生什么。它不能只是复制代码。
对于 MacOS: 安装替身演员:
homebrew install stuntman
然后运行:
/opt/homebrew/Cellar/stuntman/1.2.16/bin/stunclient stunserver.stunprotocol.org --mode behavior
Binding test: success
Local address: 192.168.1.115:56027
Mapped address: xx.xx.xx.xx:19319
Behavior test: success
Nat behavior: Endpoint Independent Mapping