前文:

关于“内网穿透”的一些知识(续2)—— 端口预测

-------------------------------------------

本文是对前面几篇文章的补充。这里要说下我们这几篇文章讨论的都只是NAT功能的设备,在实际的家庭用户中这个NAT设备就是家庭路由器或者说是带有网关功能的家庭网络共享器,但是在实际的企业环境下作为NAT设备的网关设备往往在具备NAT功能的同时还具有防火墙和均衡负载等功能,这时候前面讨论的很多情况就不适用了。比如说带防火墙的NAT设备,往往会检测数据包的内容并做主动防御的,对于短时间的扫描端口的数据包可能是会直接拒绝访问的(比如:https://www.cnblogs.com/colin-vio/p/17852504.html),这样就不能使用所谓的“端口预测”技术,而有的NAT设备带有均衡负载功能,所以这种NAT设备的类型是不固定的,有时候是Full Cone Net类型,而有的时候却是Symmetric NAT类型,但是不管是什么样类型的NAT设备和NAT网络,在打洞技术无效的情况下都是可以使用中继服务器做中转通信从而实现内网穿透的。

关于NAT类型判断:

给出https://www.cnblogs.com/colin-vio/p/13323228.html中的内容:

--------------------------------

引自:https://www.cnblogs.com/colin-vio/p/13323228.html

路由器nat类型判断可以用排除法按下面几个步骤来实现。 首先我们应该明确IETF提供的标准一共有4种常见NAT。分别是:

  • 全锥型(full cone nat)
  • 地址限制锥型(ip restrict cone nat)
  • 端口限制锥型(port restrict cone nat)
  • 对称型(symmetric nat) 对于市场上面一些厂商自已实现其它的nat我们不做过多的探讨,以实际测试经验来看,这类nat的路由器非不的少,但也不是不存在,我们过往测试中也发现过。比如中国移动在给宽带用户安装宽带时使用了一种集成了光猫和路由功能的盒子。他的安全性像全锥型,即外来连接消息包都允许进来,但对外端口映射时又表现为对称型。

NAT类型判断算法整体流程大至是,先判断防火墙是否阻止所有udp包进来,再判断是否是公网ip,再判断是否为全锥型,然后判断是否是对称型,最后判断是否是端口或地址限制型。

下面描述详细的判断过程,过程中需要与3台具有不同IP的服务器交互辅助。我们把这3台服务器称之为“协调服务器”,分别称为s1,s2,s3。

  1. 判断路由器防火墙是否防止所有UDP包进入 客户端向s1:30017发送一UDP包,s1收到后直接返回一udp数据包,如果客记端收不到s1的回包,那么判定为阻止所有udp,判断结束,否则进入一下判断。为了降低udp在网络中丢失,此过程可以重复多次。
  2. 判断主机是否直连公网 客户端收到s1回复,s1在处理时取出客户端的ip放入回复包里,客户商解析出数据区的ip与本机本地取出的所有ip对比,看是否存在匹配。存在匹配即认定当前主机是直接连接在公网上的,中间没有经过任何网关路由器,判断结束,否则进入一下判断。
  3. 判断当前网络的网关路由器是否为全锥型 客户端向s1:30017端口发送消息请求s1通知s3从不同于30017端口回一个udp消息包,如果客户端能收到s3的回复。那判定为全锥型nat,否则进入下一步判断。
  4. 判断是否为对称型nat 客户端分别向s1:30018,s2:30018发送udp消息,s1,s2收到包后,取出客户端的ip:port放入数据包发送回给客户端。客户端这样就取回自己的两份公网ip:port数据,客户端对比这两个地址,如果这两ip:port不一样那么就是客户端网关就是对称型。否则就是锥型,要么是地址限制型,要么是端口限制型。就需要继续向下判断了。
  5. 判断是地址限制型还是端口限制型nat 客户端向s1:30018发消息,请求s1从另一个端口回复一个消息比如端口6000。如果客户端收到了s1所回复的消息,那么判定为地址限制型而非端口限制型。否则收不到回复就判定为端口限制型。因为s1从非30018端口回复消息补路由器阻止了。

--------------------------------

 

在对NAT类型进行判断时可以使用TCP数据包也可以使用UDP数据包,但是由于TCP数据包的协议性质有一定时间的等待(重发机制和三次握手)所以速度上要慢于UDP,所以在进行NAT类型判断的时候会优先使用UDP数据包进行判断,但是UDP包协议存在不可靠性因此需要多发几次包才有可信度。上面给出的NAT类型判断的第一步就是判断UDP数据包可以不可以作为发送方被NAT设备方向,如果有的NAT设备防火墙机制较高不允许UDP作为主动方发送(各别NAT设备防火墙可能禁止使用UDP通信协议),那么在进行NAT类型判断时就需要换用TCP协议,当然这会导致判断过程的时间增加。

参考:

https://blog.csdn.net/u011060906/article/details/129533798

https://www.cnblogs.com/colin-vio/p/13323228.html

https://www.cnblogs.com/ssyfj/p/14791064.html

https://www.cnblogs.com/ssyfj/p/14797389.html

关于“内网穿透”的一些知识(续3)—— NAT类型判断的更多相关文章

  1. QuantumTunnel:内网穿透服务设计

    背景 最近工作中有公网访问内网服务的需求,便了解了内网穿透相关的知识.发现原理和实现都不复杂,遂产生了设计一个内网穿透的想法. 名字想好了,就叫QuantumTunnel,量子隧道,名字来源于量子纠缠 ...

  2. 今天学到的新知识--使用localtunnel实现内网穿透,感觉很神奇哇~~

    localtunnel 是一个基于 nodejs 的内网穿透工具.通过简单的安装可以实现将内网里的设备的某个端口暴露在公网中以提供服务. 首先你电脑要有node环境 使用本地隧道,对应本地服务的端口号 ...

  3. 使用FRP做内网穿透

    Github地址:https://github.com/fatedier/frp 什么是FRP? frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 h ...

  4. 手写内网穿透服务端客户端(NAT穿透)原理及实现

    Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...

  5. NAT、端口映射、内网穿透、公网IP都是啥

    原文地址:https://wuter.cn/1756.html/ 一.IPv4地址 IP协议是为计算机网络相互连接进行通信而设计的协议,它是能使连接到网上的所有计算机网络实现相互通信的一套规则. 这里 ...

  6. 内网穿透神器(ngrok)服务端部署【分享一台自己的ngrok服务器】【多平台】

    Ngrok为何物 “ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放.”这是百度百科上给Ng ...

  7. SSH 端口转发+内网穿透

    用最直白的语言对本文所有内容进行定义: 端口转发(-L):用A机器(内网)登录B机器(公网), 在A机器打开端口,将收到的所有请求转发到B机器的某个端口 (在代理机上执行) 内网穿透(-R):用A机器 ...

  8. Ngrok 内网穿透利器

    Ngrok是什么 Ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.Ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放 为什么要使用Ngrok ...

  9. Ngrok 内网穿透神器(转载)

    mac上配置web服务: http://note.rpsh.net/posts/2013/11/27/osx-10-9-apache-server-php-mysql/ Ngrok 内网穿透神器 由于 ...

  10. SSH的内网穿透

    SSH的内网穿透 1.内网:     ssh -N -f -R 2222:127.0.0.1:22 lienzh@我的PC的IP2.外网:     ssh -p 2222 root@localhost ...

随机推荐

  1. scrcpy 安卓投屏

    下载地址:https://github.com/Genymobile/scrcpy 电脑是WINDOWS的,下载WINDOWS版scrcpy:scrcpy-win64-v1.14.zip,解压到:D: ...

  2. 限速上传文件到腾讯对象存储cos的脚本

    官网:https://cloud.tencent.com/document/product/436/12269 安装包,这里用的python2.7 # pip install -U cos-pytho ...

  3. spring与设计模式之三代理模式

    部分内容引用: https://blog.csdn.net/shulianghan/article/details/119798155 一.定义 1.1定义 对于现实生活中的代理,大家非常好理解.我们 ...

  4. java并发和排序的简单例子(Runnable+TreeSet)

    很多时候并发需要考虑线程安全,但也有很多时候和线程安全毛关系都没有,因为并发最大的作用是并行,线程安全仅仅是并发的一个子话题. 例如常常会用于并发运算,并发i/o. 下文是一个练习笔记. 运行环境:w ...

  5. EIGRP总结

    EIGRP     思科私有,2013年公开,其他厂商不支持,所以用得不是很多     几秒钟就能完成收敛     触发更新,只要网络不发生变化就不会发生更新     按需更新,只更新变化的部分    ...

  6. 11-CSS定位

    01 CSS定位概念理解 01 标准流布局概念的理解 02 position属性 02 相对定位 依然在标准流中 应用场景: 在不影响其它元素的情况下,对当前元素进行微调 <!DOCTYPE h ...

  7. Numpy技巧: 由label获得相等矩阵

    Numpy技巧: 由label获得相等矩阵     假设Label为:  [ABAC] , 如何方便的得到一个矩阵, 其元素i,j表示第i位和第j位相等呢?   先把Label复制扩展成: m,m 的 ...

  8. GUI测试稳定性的关键技术

    标签(空格分隔): GUI测试稳定性 GUI测试稳定性的关键技术 GUI 自动化测试稳定性,最典型的表现形式就是,同样的测试用例在同样的环境上,时而测试通过,时而测试失败. 这也是影响 GUI 测试健 ...

  9. 转-tomcat在控制台打印时乱码

    描述 使用windows的控制台启动tomcat (8.5),Tomcat终端打印出现乱码,在CSDN上找到一个简单有效的解决办法,在此记录. 解决方案 找到Tomcat的根目录下的 /conf/lo ...

  10. CF372C

    思路 根据题意可以得到dp转移方程是 \(f_{i,j}=\max\{f_{i-1,k}+b_i-|a_i-j|\}\) 而且 \(j-(t_{i}-t_{i-1})\times d\le k\le ...