基于Hole Punching的UDP穿越Symmetric NAT的方法(中2)

2.1.3 猜测方法与算法思路

NAT映射的端口范围为(1024,65535),设PS为目标主机向服务器S注册时的全局端口号,把区间(1024,PS)和(PS,65535)以PS为界分成数百段(本算法分为400段)。

 

1. 对【判定2】端口的猜测

对端口映射方式是【判定2】的情形,由于第二种方式的可能性大于第三种,故目标端口号P很可能落在PS附近的段内。算法先猜PS左右邻的两段,随机猜遍这两段内的数字,若没有猜中再猜次靠近PS的两段,同样随机猜遍段内所有数字。猜遍附近的若干段(本算法共猜12段)若仍猜不中,说明端口映射方式很可能是第三种,就改为完全随机猜测其余段的所有数字。

 

2. 对【判定1】端口的猜测

对端口映射方式是【判定1】的情形,目标端口号P最有可能落在PS右侧的数段之内。

先考虑映射是递增加1的情形。目标主机Clent B在第一次向Client A发送猜询报文之前,B可能访问过A方内网的其他主机,这时B的NAT全局端口号增加;B方内网的其他主机也可能向主机S、或向 A方内网的主机发送过报文,那么这个NAT全局端口号又会增加(假定这些内网主机和主机B的私有地址都映射到NAT的同一个全局地址比如202.1.1.1上),即NAT全局端口号可能已经由B注册时的值增加了1,或增加了2,3,…,k,等等。若这时B发送报文给A,NAT映射的新端口号P就是接着这个序列的最大值Pmax (Pmax=PS+k)加1。该最大值的端口号Pmax,可能是B方某主机最近一次向S注册时映射而成,也可能是B方某主机(包括B)发送报文给A方某主机时映射而成。若是后者,S无法知道从而Client A无法知道;Client A能够知道的是B方最近一次向S注册的、映射为与B同一全局地址的主机的全局端口号,即在前面判断映射方式时提到的P0,PS≤P0≤Pmax 。

若是此情形,从P0+1猜起,猜k+1次必能猜到Pmax+1即必猜中P。若仍没猜中,就表明映射不是递增加1而可能是递增加T方式,还可能是第二或是第三种方式。

注意k是未知的,但可从其他途径估算。

若映射是递增加T方式,则端口号P(P=P0 +kT+1)落在(P0 +k+1,65535)之内,T是未知常数,经验发现T∈[2,9]。猜测时随机取增加值T∈[2,9]在区间(P0 +k+1,P0+9k+1]上猜遍所有数字,共猜8k次,必能猜中。若没猜中则表明映射是第二种或第三种方式,就转为按【判定2】的情形猜测。

原文地址http://hi.baidu.com/bluenet/blog/item/3f4a376d21bce9fb43169488.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值