nat类型探测方法(排除法)
首先声明一下隔断
server(ip1:port1, ip2:port2): 在公网的服务器,具有两个公网ip,并开启两个端口
client(ip:prot): 客户端的内网地址
nat(ip:port): 客户端的外网地址
1.是否存在nat
client(ip:prot)向server(ip1:port1)发送数据,要求server(ip1:port1)返回自己的nat(ip:port)
if (收到nat(ip:port))
if (nat(ip:port) == client(ip:prot))
不存在nat
else
存在nat
else
udp不通, server(ip1:port1)不存在, ...
2.是否是完全锥型nat
client(ip:prot)向server(ip1:port1)发送数据,要求server(ip2:port2)通过nat(ip:port)向自己返回数据
if (收到数据)
完全锥型nat
else
不能够确定nat类型
3.是否是对称nat
client(ip:prot)向server(ip2:port2)发送数据,要求server(ip2:port2)返回自己的nat(ip2:port2)
if (nat(ip2:port2) == nat(ip:port))
不能够确定nat类型
else
对称型nat
4.是否是受限锥型nat
client(ip:prot)向server(ip1:port1)发送数据,要求server(ip1:port2)返回数据
if (收到数据)
受限锥型nat
else
端口受限锥型nat