路由器NAT 类型检测实现

路由器NAT 类型检测实现四种主要类型完全圆锥型NATFullConeNAT 受限圆锥型NATAddressRestrictedConeNAT 端口受限圆锥型NATPortRestrictedConeNAT 对称型NAT(SymmetricNAT又称为双向NAT,大型公司网络中经常采用的)所谓圆锥型NAT是指内网机器A用同一个IP和端口去连外面任何一台计算机,它在NAT服务器上映射的都是同一个IP地址和端口,也就是说同一个内网IP和端口在NAT上都只有一个出口,是个一对多的关系,这个就有点.

大家好,欢迎来到IT知识分享网。

四种主要类型

  1. 完全圆锥型NAT Full Cone NAT
  2. 受限圆锥型NAT Address Restricted Cone NAT
  3. 端口受限圆锥型NAT Port Restricted Cone NAT
  4. 对称型NAT(Symmetric NAT 又称为双向NAT,大型公司网络中经常采用的)

 

所谓圆锥型NAT是指内网机器A用同一个IP和端口去连外面任何一台计算机,它在NAT服务器上映射的都是同一个IP地址和端口,也就是说同一个内网IP和端口在NAT上都只有一个出口,是个一对多的关系,这个就有点像圆锥,一个点,一个面构成。

所谓对称型NAT是指内网机器A中的一个IP地址和端口访问不同的外部IP地址和端口时,都会形成不同的映射,也就是说,内网IP+端口和目的IP、端口 是一对一的关系,任何一点改变,映射都将改变。现在的Linux系统中是这种类型,安全性好。

具体是哪种类型,可以通过做NAT时的算法决定,代码层面并不复杂。如果对4种类型不是很清楚,可以百度下,不少文章都有配图,讲的非常好。废话不多说,直接上干货。

 

实现代码

git clone https://gitee.com/wangxinyu2011/nat_type_check.git

实现方案

路由器NAT 类型检测实现

1.

发送:Client 使用(IP1, PORT1) 向服务器的 (IP3, PORT3)发送数据。

返回 :同时服务器返回收到(IP2, PORT2)。

 

如果 (IP1 , PORT1)等于(IP2, PORT2),则不存在NAT。

否则存在NAT。

 

2.

发送:Client 使用(IP1, PORT1) 向服务器的 (IP3, PORT3)发送数据。要求服务器以(IP4,PORT4)向 NAT后的(IP2, PORT2)发送数据。

 

如果Client 能收到数据,则为Full cone

如果收不到数据,继续检测。

 

3.

发送:Client 使用(IP1, PORT1) 向服务器的 (IP3, PORT3)发送数据。要求服务器以(IP3,PORT4)向 NAT后的(IP2, PORT2)发送数据。

 

如果Client能收到数据,则为Address Restricted Cone NAT

如果收不到数据,继续检测。

 

4.

发送:Client 使用(IP1, PORT1) 向服务器的 (IP3, PORT3)发送数据。

返回 :同时服务器返回收到(IP2, PORT2)。

断开WAN口再连接上(消除连接跟踪表)

发送:Client 使用(IP1, PORT1) 向服务器的 (IP3, PORT3)发送数据。

返回 :同时服务器返回收到(_IP2, _PORT2)。

如果 (IP2, PORT2)与(_IP2, _PORT2) 相同,则为PORT Restricted Cone NAT,

否则为对称NAT。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/12244.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信