STUN检测NAT类型原理(转)

8 篇文章 0 订阅

STUN检测NAT类型原理(转)

STUNRFC3489规定的一种NAT穿透方式,它采用辅助的方法探测NATIP和端口。毫无疑问的,它对穿越早期的NAT起了巨大的作用,并且还将继续在ANT穿透中占有一席之地。
STUN的探测过程需要有一个公网IPSTUN Server,在NAT后面的UACUser Agent Client)必须和此Server配合,互相之间发送若干个UDP数据包。UDP包中包含有UAC需要了解的信息,比如NAT外网 IPPORT等等。UAC通过是否得到这个UDP包和包中的数据判断自己的NAT类型。
假设有如下UACB),NATA),STUN SERVERC),UACIPIPBNATIPIPASERVERIPIPC1IPC2。请注意,STUN 服务器C有两个IP,后面你会理解为什么需要两个IP

STEP1
BCIP1port1端口发送一个UDP包。C收到这个包后,会把它收到包的源IPport写到UDP包中,然后把此包通过IP1port1发还给B。这个IPport也就是NAT的外网IPport,也就是说UACSTEP1中就得到了NAT的外网IP
如果在UAC向一个STUN服务器发送数据包后,没有收到STUN的任何回应包,那只有两种可能:1STUN服务器不存在,或者port弄错了;2、你的NAT拒绝一切UDP包从外部向内部通过(我们公司的NAT就是)。
B收到此UDP后,把此UDP中的IP和自己的IP做比较,如果是一样的,就说明自己是在公网。如果不一样,说明有NAT的存在,系统进行STEP2的操作。

STEP2
BCIP1发送一个UDP包,请求C通过另外一个IP2PORT(不同与SETP1IP1)向B返回一个UDP数据包(现在知道为什么C要有两个IP了吧,呵呵)。
我们来分析一下,如果B收到了这个数据包,那说明什么?说明NAT来者不拒,不对数据包进行任何过滤,这也就是STUN标准中的full cone NAT。遗憾的是,full cone NAT太少了,这也意味着你能收到这个数据包的可能性不大。如果没收到,那么系统进行STEP3的操作。

STEP3
BCIP2port2发送一个数据包,C收到数据包后,把它收到包的源IPport写到UDP包中,然后通过自己的IP2port2把此包发还给B。和step1一样,B肯定能收到这个回应UDP包。此包中的port是我们最关心的数据,下面我们来分析:
如果这个portstep1中的port一样,那么可以肯定这个NAT是个CONE NAT,否则是对称NAT。道理很简单:根据对称NAT的规则,当目的地址的IPport有任何一个改变,那么NAT都会重新分配一个port使用,而在step3中,和step1对应,我们改变了IPport。因此,如果是对称NAT,那这两个port肯定是不同的。
如果在你的应用中,到此步的时候PORT是不同的,恭喜你,你的STUN已经死了。如果不同,那么只剩下了restrict coneport restrict cone。系统用step4探测是是哪一种。

STEP4
BCIP2的一个端口PD发送一个数据请求包,要求CIP2和不同于PDport返回一个数据包给B
我们来分析结果:如果B收到了,那也就意味着只要IP相同,即使port不同,NAT也允许UDP包通过。显然这是restrict cone NAT。如果没收到,没别的好说,port restrict NAT.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值