一种能比较准确地猜测NAT的影射端口的方法

版权声明:本文由SkyMountain发表,引用地址为http://blog.csdn.net/skymountain/。作者保留一切版权,转载务必注明出处,否则视作侵权。

昨晚忽然想到一种方法能比较准确地猜测NAT的影射端口。我指的是那种目标端口敏感的NAT,这种NAT以前是很难穿透的。

这种方法使用了三个新socket(也即新的本地端口)来探测 。新建三个socket,每个socket与以前没用过的端口 绑定。然后按时间顺序,第一个socket给stun服务器发送 数据包,第二个socket给目标服务器发送数据包 ,也即执行打孔动作,第三个socket再次给stun服务器发送 数据。三个动作均会在服务器上新开一个影射端口 。三个动作时间间隔很短,大约100ms即可。这样,我们有理由相信,第二个socket所 分配的映射端口很可能在第一个影射端口和第二个影射端口之间。也即port2>port1同时 port2<port3。可能性最大的是:
port2 = (port1+port3)/2

如果服务器发现port3<port1,或者port1与por t3之间差距过大,那么很可能是NAT上的端口号已经开始重新分 配,那么应当让客户端重复一下这个流程。重复多几次 ,猜测成功的几率会大很多。

一个例外情况是所谓端口保持NAT,也即NAT分配新端口时 ,尽量使新端口号与内网端口号保持一致。但这种情况很容易识别 ,服务器简单比较客户端的内网端口和映射端口即可 。如果发现是这类NAT,那么上面的公式就要修改了:
port2 = 第二个socket的内网端口号

当然,端口猜测方法无论如何也是猜测而已,内网之间的用户仍然不可能有100%的连结率。但是猜测端口的方法可 以提高跨NAT连接率,从而降低数据中转服务器的负担。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值