关于“内网穿透”的一些知识(续3)—— NAT类型判断
前文:
关于“内网穿透”的一些知识(续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。
- 判断路由器防火墙是否防止所有UDP包进入 客户端向s1:30017发送一UDP包,s1收到后直接返回一udp数据包,如果客记端收不到s1的回包,那么判定为阻止所有udp,判断结束,否则进入一下判断。为了降低udp在网络中丢失,此过程可以重复多次。
- 判断主机是否直连公网 客户端收到s1回复,s1在处理时取出客户端的ip放入回复包里,客户商解析出数据区的ip与本机本地取出的所有ip对比,看是否存在匹配。存在匹配即认定当前主机是直接连接在公网上的,中间没有经过任何网关路由器,判断结束,否则进入一下判断。
- 判断当前网络的网关路由器是否为全锥型 客户端向s1:30017端口发送消息请求s1通知s3从不同于30017端口回一个udp消息包,如果客户端能收到s3的回复。那判定为全锥型nat,否则进入下一步判断。
- 判断是否为对称型nat 客户端分别向s1:30018,s2:30018发送udp消息,s1,s2收到包后,取出客户端的ip:port放入数据包发送回给客户端。客户端这样就取回自己的两份公网ip:port数据,客户端对比这两个地址,如果这两ip:port不一样那么就是客户端网关就是对称型。否则就是锥型,要么是地址限制型,要么是端口限制型。就需要继续向下判断了。
- 判断是地址限制型还是端口限制型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类型判断的更多相关文章
- QuantumTunnel:内网穿透服务设计
背景 最近工作中有公网访问内网服务的需求,便了解了内网穿透相关的知识.发现原理和实现都不复杂,遂产生了设计一个内网穿透的想法. 名字想好了,就叫QuantumTunnel,量子隧道,名字来源于量子纠缠 ...
- 今天学到的新知识--使用localtunnel实现内网穿透,感觉很神奇哇~~
localtunnel 是一个基于 nodejs 的内网穿透工具.通过简单的安装可以实现将内网里的设备的某个端口暴露在公网中以提供服务. 首先你电脑要有node环境 使用本地隧道,对应本地服务的端口号 ...
- 使用FRP做内网穿透
Github地址:https://github.com/fatedier/frp 什么是FRP? frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 h ...
- 手写内网穿透服务端客户端(NAT穿透)原理及实现
Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...
- NAT、端口映射、内网穿透、公网IP都是啥
原文地址:https://wuter.cn/1756.html/ 一.IPv4地址 IP协议是为计算机网络相互连接进行通信而设计的协议,它是能使连接到网上的所有计算机网络实现相互通信的一套规则. 这里 ...
- 内网穿透神器(ngrok)服务端部署【分享一台自己的ngrok服务器】【多平台】
Ngrok为何物 “ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放.”这是百度百科上给Ng ...
- SSH 端口转发+内网穿透
用最直白的语言对本文所有内容进行定义: 端口转发(-L):用A机器(内网)登录B机器(公网), 在A机器打开端口,将收到的所有请求转发到B机器的某个端口 (在代理机上执行) 内网穿透(-R):用A机器 ...
- Ngrok 内网穿透利器
Ngrok是什么 Ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.Ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放 为什么要使用Ngrok ...
- Ngrok 内网穿透神器(转载)
mac上配置web服务: http://note.rpsh.net/posts/2013/11/27/osx-10-9-apache-server-php-mysql/ Ngrok 内网穿透神器 由于 ...
- SSH的内网穿透
SSH的内网穿透 1.内网: ssh -N -f -R 2222:127.0.0.1:22 lienzh@我的PC的IP2.外网: ssh -p 2222 root@localhost ...
随机推荐
- 1003 我要通过! PTA Basic Level
我的个人博客 azoux's blog 题目 我要通过! (20 分) "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 ...
- nordic——long range测试
简介:本案例测试了long range,注意nrf52系列芯片中,部分硬件是不支持CADE的,也就是不支持long range,如nrf52832就不支持long range.同时协议栈也是部分支持, ...
- linux中cp复制时处理软链接的两种方式
linux中cp复制时处理软链接的两种方式 cp -r -L 复制原始文件 cp -r -P 复制软链接本身
- 使用getevent在Android中调试输入子系统
# Android getevent用法详解 背景 在调试安卓设备按键,想使用hexdump,但是发现没有找到,反而找到了这个更好用的工具. 以下是我的调试片段 # getevent -l /dev/ ...
- 国产自主架构!龙芯2K1000LA工业核心板正式发布!
国产自主架构!龙芯2K1000LA工业核心板正式发布! 原创 Tronlong创龙科技 Tronlong创龙科技 2024-06-13 07:50 广东 Tronlong创龙科技 ,赞18 (点击视频 ...
- WEB入门 - 文件上传
WEB入门 - 文件上传 参考文章 https://fushuling.com/index.php/2023/08/20/ctfshow刷题记录持续更新中/ https://www.cnblogs.c ...
- SpringBoot实现RequestBodyAdvice和ResponseBodyAdvice接口
Spring Boot 提供了一种机制,允许开发者在请求体(RequestBody)和响应体(ResponseBody)被处理之前和之后执行自定义逻辑.这通过 RequestBodyAdvice 和 ...
- JavaSE 计算2个List集合中的交集、差集、并集、去重并集
VideoOrder.java 重写里面的equals和hashCode方法 class VideoOrder { private int price; private String title; p ...
- 洛谷P1077
这道题和上一道题也是比较像的,基本采用的也是线性dp的思路 状态数组稍微有点不同,这里表示的是当前种数的花时一共的花的数量 #include<iostream> #include<u ...
- 测试人必会 K8S 操作之 Dashboard
在云计算和微服务架构的时代,Kubernetes (K8S) 已成为管理容器化应用的标准.然而,对于许多新手来说,K8S 的操作和管理常常显得复杂而神秘.特别是,当你第一次接触 K8S Dashboa ...