首页 > 技术文章 > nat类型探测方法(排除法)

vc60er 2020-06-12 00:06 原文

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

推荐阅读