以编程方式确定路由器NAT类型

sth*_*tfo 4 nat nat-traversal stun

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

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

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

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

提前致谢.

sel*_*bie 5

RFC 3489分为三个不同的RFC:

RFC 5389 - 基本STUN协议.STUN绑定请求和绑定响应的基本协议与RFC 3489大致相同.协议头部通过占用某些事务id字段的魔术cookie进行更新.一些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服务器代码.