路由器NAT 类型检测实现
四种主要类型
- 完全圆锥型NAT Full Cone NAT
- 受限圆锥型NAT Address Restricted Cone NAT
- 端口受限圆锥型NAT Port Restricted Cone NAT
- 对称型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
实现方案
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。
路由器NAT 类型检测实现相关推荐
- 路由器NAT类型检测
考虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone.Restricted Cone.Port Restricted Cone和Symmetric NAT四种.值得指出的是,对 ...
- P2P内网穿透之Nat类型介绍及Nat类型检测16种NAT组合穿透操作指南整理
目录 根据RFC 3489规定 Nat共分以下类型: 第一部分: NAT类型介绍 Full Cone NAT: Restricted Cone NAT: Port Restricted Cone NA ...
- Linux怎么检测nat类型,STUN(RFC3489)的NAT类型检测方法
在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信(即所谓的P2P通信),而不需 ...
- openwrt上用stun实现NAT类型检测
一.安装stun: 相关组件下载参照:https://github.com/awe1p/stun cd到openwrt源代码路径 git glone https://github.com/awe1p/ ...
- Linux设备检测外部网络NAT类型
Linux设备检测外部网络NAT类型 在异地组网的过程中发现,对称型NAT(Symmetric NAT)对P2P穿透的支持很不好,因此在搭建P2P穿透个人使用的客户端或服务器之前有必要搞清楚自己所在网 ...
- stun检查nat类型
nat(Session Traversal Utilities for NAT)会话穿越应用程序,可以让位于nat后的客户端找出自己的公网地址以及对应的Internet端口,最重要的是可以判断自己处于 ...
- NAT类型及检测方法
一 NAT的类型 NAT可以分为很多种,但是最为普遍的是传统NAT,或者称为向外NAT.向外NAT在默认情况下只允许向外的Session穿越NAT,这就是我们最为常见的情况. 这种向外NAT又可以分为 ...
- [转]NAT类型与检测
NAT类型与检测 一.NAT分类 Full Cone NAT(完全圆锥型) Address Restricted Cone NAT(地址限制圆锥型) Port Restricted Cone NA ...
- NAT 类型及检测方法
NAT 类型及检测方法 STUN协议是一个客户机/服务器协议,在公网上存在着大量的STUN服务器,用户可以通过在自己主机上运行STUN客户端远程连接STUN服务器来确认自身的网络状况. 客户端主机所在 ...
最新文章
- 面试官:聊一聊 Spring Boot 服务监控机制
- db2安装包v10.5_LINUX安装db2V10.5步骤
- TCP和UDP是否可以绑定同一端口进行通信
- 新建linux 服务器初始化配置
- [我研究]Behavior Based Software Theft Detection - Hawk
- 哈工大刘挺:如何训练一个更强大的中文语言模型?
- Ubuntu18.04下C++编译tensorflow并在QT中使用
- PHP调微信小程序接口生成access_token
- 计算机用户名显示TEMP,windows7登陆创建TEMP临时个人配置文件夹解决方法-系统操作与应用
-亦是美网络...
- INA217构成的专业级微型话筒(麦克风)前置放大典型电路图
- Barra风险模型简介
- 用计算机数字唱歌,悬赏跪求计算器各种歌曲数字谱(最好带和音)
- 语音转写基于科大讯飞WebApi接口的安卓实现--上传录音音频翻译成文字
- 如何批量生成Flattermarken条码
- Qt中根据pc屏幕分辨率按比例修改窗口的大小
- Libgdx slg游戏进程记录
- 非遗“洋蛇灯”国家级传承人身患尿毒症 期待年轻人加入
- DDS格式介绍及相关工具
- 机器学习/深度学习/图机器学习 学习小结
- 2019年最佳云桌面服务商
热门文章
- 计算机专业我的工匠梦作文,【推荐】我的科技梦作文7篇
- 圣诞之歌:クリスマス タイム和My Baby Grand~ぬくもりが欲しくて~ ZARD
- springboot实现微信小程序二维码生成
- C++实现小写转大写
- [iOS Xib加载/封装] xib加载以后无法赋值Laber属性的值
- 笔记本html外接显示器,提升效率 笔记本外接显示器(Intel篇)
- 如何更改计算机管理员账户名称,win10系统管理员名称怎么改_win10管理员账户名怎么修改...
- MATLAB编程之混沌系统
- 直播视频流+html,前端页面播放 rtmp 流与 flv 格式视频文件
- IP地址短缺该如何解决?