一种能比较准确地猜测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连接率,从而降低数据中转服务器的负担。

基于端口准随机猜测的UDP穿越Symmetric_NAT的方法

  • 2014年07月14日 08:42
  • 333KB
  • 下载

NAT原理简介及路由器的端口映射方法

  • 2012年11月21日 17:50
  • 113KB
  • 下载

VBOX非NAT(Host-only)模式里拨VPN、端口映射设置方法

  • 2011年04月10日 18:33
  • 6.02MB
  • 下载

一种不需要握手服务器穿透NAT的UDP通讯方法

在很多P2P软件中间很多需要两个NAT底下的两个PC, 假设 路由器A IP是 222.222.33.33 路由器B IP是 200.200.33.33 PC A IP是 19...
  • mergerly
  • mergerly
  • 2012年12月28日 15:17
  • 3950

物理机通过nat的端口影谢连接虚拟机的ssh方法

使用的虚拟机是vmware,安装的系统是ubuntu系统安装好后.点击虚拟机菜单打开nat影谢的设置注意,ubuntu已经通过静态方式设置了ip与dns了.设置/etc/network/interfa...
  • qidizi
  • qidizi
  • 2013年03月28日 16:53
  • 613

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

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

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

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

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

直接入正题,以示例作为说明
  • xingaj
  • xingaj
  • 2014年10月04日 20:56
  • 2235

获取当前空闲CPU比较准确的方法

转载自:http://stackoverflow.com/questions/8223348/ios-get-cpu-usage-from-application #import flo...
  • chenyong05314
  • chenyong05314
  • 2014年09月28日 11:27
  • 2252

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

浮点数计算结果比较 一则浮点数计算例子如下: $a = 0.2+0.7; $b = 0.9; var_dump($a == $b); 打印出的结果是:bool(false)。也就是说在...
  • xyw_Eliot
  • xyw_Eliot
  • 2014年09月09日 21:32
  • 1067
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一种能比较准确地猜测NAT的影射端口的方法
举报原因:
原因补充:

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