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