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

原创 2006年05月22日 16:30:00
版权声明:本文由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与port3之间差距过大,那么很可能是NAT上的端口号已经开始重新分配,那么应当让客户端重复一下这个流程。重复多几次,猜测成功的几率会大很多。

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

当然,端口猜测方法无论如何也是猜测而已,内网之间的用户仍然不可能有100%的连结率。但是猜测端口的方法可以提高跨NAT连接率,从而降低数据中转服务器的负担。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

windows--virtualbox端口号映射失败的解决方法:NAT: set redirect TCP host

背景: 在windows 7中安装virtualbox虚拟机运行来如ubuntu、android等系统,当采用NAT模式启动时如果主机pc端需要和虚拟机内部镜像通信,则需要采用端口映射方式来实现,...

NAT外网访问内网方法,内网端口映射外网ip

由于公网IP地址有限,不少ISP都采用多个内网用户通过代理和网关路由共用一个公网IP上INTERNET的方法,这样就限制了这些用户在自己计算机上架设个人网站,要实现在这些用户端架设网站,最关键的一点是...

花生壳使用方法,nat123内网映射外网,80端口映射

直接入正题,以示例作为说明
  • xingaj
  • xingaj
  • 2014-10-04 20:56
  • 2011

PHP 浮点数计算比较及取整不准确的解决方法

浮点数计算结果比较 一则浮点数计算例子如下: $a = 0.2+0.7; $b = 0.9; var_dump($a == $b); 打印出的结果是:bool(false)。也就是说在...

怎么恢复移动硬盘中毒了数据呢丨用什么方法恢复比较方便准确呢丨

移动硬盘中毒了数据要怎么恢复 不知道是谁把我电脑给弄上了那么多病毒的,我想,肯定是前两天刚刚上班的夜班保安吧,晕死,这些人的生活规律真的是耐人寻味啊!虽然是专职夜班,但是大门是关着的,你也不必那...

PHP 浮点数计算比较及取整不准确的解决方法

PHP 浮点数计算比较及取整不准确的解决方法 浮点数计算结果比较 一则浮点数计算例子如下: $a = 0.2+0.7; $b = 0.9; var_dump($a == $b); ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)