和RFC3489最大的不同点在于,STUN本身不再是一个完整的NAT传输解决方案,而是在NAT传输环境中作为一个辅助的解决方法,同时也增加了TCP的支持。...而完整的NAT传输解决方案则使用STUN的工具性质,ICE就是一个基于offer/answer方法的完整NAT传输方案,如SIP。 STUN是一个C/S架构的协议,支持两种传输类型。...值得一提的是,在一次TCP连接中,STUN客户端可能发起多个传输,有可能在前一个Request的Response还没收到时就再次发送了一个新的Request,因此客户端应该保持TCP链接打开,认所有STUN...服务端接着检查方法和其他指定要求,如果所有检查都成功,则会产生一个Success Response给客户端。...以Binding方法为例,客户端会检查报文中是否包含XOR-MAPPED-ADDRESS属性,然后是地址类型,如果是不支持的地址类型,则这个属性会被忽略掉。
NAT类型 NAT类型有四种: 完全型锥(Full-Cone):所有来自同一个内部ip地址和端口的stun请求都可以映射到同一个外部ip地址和端口,而且,任何一个处于nat外的主机都可以向处于...这些方法就是使用stun来发现NAT的类型以及学习使用Binding。...此时只是表明stun客户端处于NAT之后,还无法判断NAT的类型,为了进一步决定NAT的类型,客户端会发送第二个Binding Request,这一次是往不同的ip地址发送,如果Binding Response...5.2.2 TCP或基于TCP的TLS发送stun请求事务或指示事务 对于TCP协议和TLS-over-TCP协议,客户端先和服务器端建立TCP连接。...然后,STUN代理将执行当前使用情况所指定的身份验证机制所需的任何其他检查,完成身份验证检查后,STUN代理会检查消息中的未知属性和已知但意外的属性。
有两种类型的请求: 绑定请求(通过UDP发送)和共享密钥请求(发送TLS (通过TCP)) 。 共享秘密请求服务器返回一个临时的用户名和密码。...STUN服务器复制该源IP地址和端口到一个STUN绑定响应,并将其发送回源IP地址和端口 的STUN请求。对于所有类型的NAT,这种响应都将能够到达STUN客户。...如果测试产生了一个响应,客户端检查响应的MAPPED-ADDRESS属性 。如果这个地址、端口和本地IP地址、端口是相同的,客户端知道它不是在NAT后面了。 然后它执行的测试二。...如果收到一个响应,客户端知道它有开放互联网(或者,至少在一个有一个防火墙其行为像全锥型NAT ,但是没有转发) 。...在多个NAT之后的情况客户机与因特网之间,该类型被发现会是在客户机和之间最严格的NAT的类型互联网。
那NAT有哪些行为类型?有什么办法来侦测NAT的行为呢?...8.2.1 NAT行为类型与侦测方法 NAT的行为类型和侦测方法是由STUN(首先在RFC3489中定义,英文全称是Simple Traversal of UDP Through NATs)协议来描述的...早期的STUN协议是由RFC3489(经典的STUN)来描述,其定义的NAT行为类型如下: 1)Full Cone NAT - 完全锥形NAT: 所有从同一个内网IP和端口号Endpoint1发送过来的请求都会被映射成同一个外网...经典 STUN 定义的 NAT 行为类型是将NAT的Mapping Behavior (映射规则)和Filtering Behavior(过滤规则)统一来归类的,这样对Symmetric NAT类型的归类过于笼统...可见RFC3489只描述了9种NAT组合行为类型中的4种。最后一个文档rfc5769,定义了一些STUN协议的测试数据用于测试STUN server的正确性。
P2P通信; 没有加密方法; 不支持TCP穿越; 不支持对称型NAT的穿越; 不支持IPV6。...NAT给客户端分配的具体绑定。...注1:Cone NAT表示锥形NAT, Symmetric NAT表示对称NAT。 注2::Prflx这种地址类型是两个点建立连接时,通过STUN的检查发现的新地址。...ip,需要发送stun包给stun服务,stun服务返回对应客户端的出口ip和端口,返回来的地址和自己本地地址做比对就知道NAT类型。...protocol(udp):传输层类型,upd或tcp。往往认为RTP、RTCP是用UDP,但webrtc其实支持用TCP。
STUN,是为了实现透明的穿透NAT,而定义的一套协 议。他使本地的内网的机器,具有取得,能够得知他的NAT网关的IP,NAT类型的能力。...可是MIDBOX协议使 ,一些CLIENT可以控制NAT/防火墙的行为,通过这个 把应用协议和NAT部分分开,把ALGS从基本NAT里面处理开。...STUN 信息结构 STUN 由以后数据结构构成:STUN头+STUN有效载荷 STUN头结构如下: 存储的值都是以网络顺序存放 字段类型 STUN message type Short int 消息类型...Length Short int 有效载荷长度,不包含头长度 transaction ID octet[16] 连接的ID值,检查Request, 和Response STUN的有效载荷 SHUN的有效载荷...是一些STUN的属性构成,属性的类型由信息的类型来决定。
# NAT类型检测算法实现import socketimport structimport threadingimport timeclass NATTypeDetector: """NAT类型检测器...协议的NAT类型检测,这是内网穿透的第一步。...通过分析本地地址与映射地址的关系,我们可以判断NAT的行为特征。...2.2 NAT行为分析与适配sequenceDiagram participant C1 as 客户端A participant N1 as NAT-A participant S as...UDP打洞以其高效和低延迟的特点,在实时应用中占据重要地位,但其成功率受NAT类型影响较大。TCP打洞虽然实现复杂,但在某些严格的网络环境中却是唯一可行的方案。
对称 NAT (Symmetric NAT):每次内网主机与不同的公网主机通信时,NAT 设备会分配不同的公网端口。 不同类型的 NAT 对穿透能力有重要影响,其中对称 NAT 是最难穿透的类型。...的行为特性,在内网设备之间建立直接连接。...类型允许,数据包将成功到达对方,建立直接连接 3.3 STUN 协议与实现 STUN (Session Traversal Utilities for NAT) 是一种用于发现 NAT 类型和获取公网地址的协议...高级穿透技术 5.1 TCP 打洞技术 TCP 打洞比 UDP 打洞更复杂,因为 TCP 的三次握手过程和 NAT 的行为特性使得直接穿透更加困难。...连接 如果双方 NAT 类型允许,其中一个连接可能成功建立 5.2 反向代理技术 反向代理是一种可靠的穿透方案,尤其适用于对称 NAT 环境: # 反向代理客户端 import socket import
由于需要连接的个人设备绝大多数都隐藏在各自的内网当中,导致无法直接获取客户端 IP 地址,也无法直接进行 P2P 的音视频通信。...下图是在 STUN(Session Traversal Utilities for NAT),对于 NAT 类型检测的流程图。当走到红色结束时:表明穿越失败,无法 UDP 通讯。...TURN 与其它中继控制协议不同的是它能够允许一个客户端使用一个中继地址与多个对端连接。 三、ICE连接机制 1....ICE Candidate 主要分为以下三种类型: host 类型:即本机内网的 IP 和端口 srflx 类型:即本机 NAT 映射后的外网的 IP 和端口 relay 类型:即中继服务器的 IP 和端口...候选项依照之前的排序按次序进行检查,当收到对方的响应时,检查视为成功,而如果检查超时后仍没有收到响应时,则该候选对失败。
从客户端发给服务器的binding requests用于确定由NAT分配的IP和端口绑定。...“更改IP”和“更改端口”标志用于确定客户端是否位于受限的锥体NAT或受限的端口锥体NAT后面,它们指示服务器从不同的源IP地址和端口发送绑定响应。...它非常有用,因为从这个属性中,STUN服务器可以检测到两次NAT配置。...这个属性通常出现在绑定响应中;它通知客户端IP地址和端口,如果客户机请求“更改IP”和“更改端口”行为则将使用该ip地址和端口。...它表示发生了一个错误,并指出了发生的错误类型。它的数值范围在100到699之间;这是错误代码,也是UTF-8编码的文本原因短语,描述错误代码,这是为客户端编写的。
但是,STUN/RFC5389协议里能处理的也只有市面上大多数的Cone NAT(关于NAT类型可以参照P2P通信原理与实现),对于Symmetric NAT,传统的P2P打洞方法是不适用的。...而这些行为如何完成,是不在TURN协议范围之内的。...值得一提的是,TURN协议本身是STUN的一个拓展,因此绝大部分TURN报文都是STUN类型的,作为STUN的一个拓展,TURN增加了新的方法(method)和属性(attribute)。...传输 在协议中,TURN服务器与peer之间的连接都是基于UDP的,但是服务器和客户端之间可以通过其他各种连接来传输STUN报文, 比如TCP/UDP/TLS-over-TCP....TURN协议因为是STUN的拓展,当然也沿袭了STUN的工具性质,只为穿越NAT提供方法,而不作为P2P通信的完整解决方案.一个比较适合研究的TurnServer源代码我也放到这里了,而客户端的实现则根据每个人的具体需求而不同
4 穿透 “NAT+防火墙”:STUN (Session Traversal Utilities for NAT) 协议 STUN 既是一些对 NAT 设备行为的详细研究,也是一种协助 NAT 穿透的协议...4.1 STUN 原理 STUN 基于一个简单的观察:从一个会被 NAT 的客户端访问公网服务器时, 服务器看到的是 NAT 设备的公网 ip:port 地址,而非该 客户端的局域网 ip:port 地址...某些 NAT 设备的行为与我们假设的一致,它们的有状态防火墙组件只要看到有客户端自己 发起的出向包,就会允许相应的入向包进入;因此只要利用 STUN 功能,再加上两端同时 发起防火墙穿透,就能把连接打通...答案是 cone 包含了两个正交维度的 NAT 行为: NAT 映射行为:前面已经介绍过了, 有状态防火墙行为:与前者类似,也是分为与 endpoint 相关还是无关两种类型。...Hairpinning 使内网连接的行为与公网连接的行为完成一致,因此我们无需关心目的 地址类型,也不用知晓自己是否在一台 CGNAT 后面。
NAT 按照 NAT 映射行为和有状态防火墙行为可以分为多种类型,但对于 NAT 穿透来说根本不需要关心这么多类型,只需要看 NAT 或者有状态防火墙是否会严格检查目标 Endpoint,根据这个因素,...那么只有来自该目标 Endpoint 的入向包才允许通过 2.2.2.2:4242,其他客户端一律不允许。这种 NAT 更加严格,所以叫 Hard NAT。...对于 Easy NAT,我们只需要提供一个第三方的服务,它能够告诉客户端“它看到的客户端的公网 ip:port 是什么”,然后将这个信息以某种方式告诉通信对端(peer),后者就知道该和哪个地址建连了!...这种服务就叫 STUN (Session Traversal Utilities for NAT,NAT会话穿越应用程序)。...中继是什么 对于 Hard NAT 来说,STUN 就不好使了,即使 STUN 拿到了客户端的公网 ip:port 告诉通信对端也于事无补,因为防火墙是和 STUN 通信才打开的缺口,这个缺口只允许 STUN
4 穿透 “NAT+防火墙”:STUN (Session Traversal Utilities for NAT) 协议 STUN[7] 既是一些对 NAT 设备行为的详细研究,也是一种协助 NAT...4.1 STUN 原理 STUN 基于一个简单的观察:从一个会被 NAT 的客户端访问公网服务器时, 服务器看到的是 NAT 设备的公网 ip:port 地址,而非该 客户端的局域网 ip:port 地址...某些 NAT 设备的行为与我们假设的一致,它们的有状态防火墙组件只要看到有客户端自己 发起的出向包,就会允许相应的入向包进入;因此只要利用 STUN 功能,再加上两端同时 发起防火墙穿透,就能把连接打通...答案是 cone 包含了两个正交维度的 NAT 行为: NAT 映射行为:前面已经介绍过了, 有状态防火墙行为:与前者类似,也是分为与 endpoint 相关还是无关两种类型。...Hairpinning 使内网连接的行为与公网连接的行为完成一致,因此我们无需关心目的 地址类型,也不用知晓自己是否在一台 CGNAT 后面。
STUN和TURN介绍 在现实的互联网环境中,大多数客户端主机都位于防火墙或NAT之后,像在视频会议、视频通话、在线教育等实时传输场景下,我们都希望网络中的两台主机能够直接穿透NAT限制进行通信,即所谓的...在新的RFC5389修订中把STUN协议定义为穿透NAT的提供工具,在原有UDP的基础增加了TCP穿透,英文全称为Session Traversal Utilities for NAT,即NAT会话穿透...漏洞概况 Slack部署的TURN服务器允许把客户端请求的UDP包和TCP请求,中继到Slack内部网络和架设在AWS服务上的元数据资源中。...由于TURN是STUN的一个扩展协议,它通过中继方式来连接NAT之后的对等客户端,这有点类似我们渗透测试视角下的“代理”。...测试Slack的TURN服务器时发现的问题 经过测试我们发现,利用Slack的TURN服务器,客户端的TCP/UDP流量不仅可以中继到其TURN服务器本身,还能中继到Slack架设在AWS上的内部地址。
你可以创建一个 NAT 在线检测工具,用于检测客户端与服务器之间的 NAT 类型(如 Full Cone NAT, Restricted Cone NAT, Port Restricted Cone NAT...这个工具通常依赖 STUN 协议来探测 NAT 类型。...步骤:创建一个简单的 NAT 检测工具下面将展示如何构建一个基于 STUN 协议的 NAT 类型检测工具,这个工具将检查用户的 NAT 类型并返回相应的结果。1. ...基本思路我们可以通过以下方式实现该工具:客户端会向 STUN 服务器发送请求。STUN 服务器会返回公共 IP 地址和端口。根据返回的公共地址和端口与私有地址和端口的映射关系,推测 NAT 类型。...点击“Detect NAT Type”按钮,它会显示检测到的公网 IP。6. 总结我们可以通过 STUN 协议来检测 NAT 类型,并基于公共 IP 和端口推测 NAT 类型。
传输层的功能是提供端对端的接口,使用的协议主要是TCP和UDP。 网络层的功能是为数据包选择路由,使用的协议是IP。 数据链路层的功能是传输有地址的帧,和检查数据错误。...Ip协议的作用就是向传输层(TCP层)提供统一的IP包,即将各种不同类型的MAC帧转换为统一的IP包,并将MAC帧的物理地址变换为全网统一的逻辑地址(IP地址)。...这样就可以通过一个NAT的IP地址和不同的端口来连接众多的局域网服务器。 那么NAT有什么问题呢? NAT的问题在于,内部客户端不知道自己外网IP地址,只知道内网IP地址。...第一种方式是使用STUN服务器。 ? STUN服务器是IP地址已知的服务器,客户端要通信之前,先去STUN服务器上面查询一下自己的外网IP和端口,然后再使用这个外网IP和端口进行通信。...它实际上就是直连,STUN和TURN的综合体,能直连的时候就直连,不能直连就用STUN,不能用STUN就用TURN。
它通过与STUN服务器交互来检测是否存在NAT、NAT类型以及外部端口映射。...如何检测NAT类型STUN/TURN协议:STUN协议可用于探测NAT类型,并帮助设备决定最合适的连接方式。如果STUN测试无法通过,可以尝试使用TURN协议作为备用解决方案。...为了更好地理解 NAT 类型和 NAT 类型检测,我们可以通过一些代码示例来展示如何在实际环境中实现 NAT 类型检测,尤其是在使用 STUN 和 UPnP 协议时。1. ...STUN 协议:检测 NAT 类型STUN(Session Traversal Utilities for NAT)是用于探测 NAT 类型的一种协议。...我们可以使用 Python 来实现一个简单的 STUN 客户端,并通过它来检测 NAT 类型。为了实现 STUN 协议,Python 中有一些现成的库,如 pystun3。
NAT 穿透技术 a) STUN(Session Traversal Utilities for NAT) 主要用于 UDP 协议 内网主机通过 STUN 服务器获取自己的公网地址和端口 适用于对称 NAT...以外的大多数 NAT 类型 b) TURN(Traversal Using Relays around NAT) 当 STUN 失败时,使用 TURN 服务器中继所有流量 适用于所有 NAT 类型,但带宽消耗大...,利用 NAT 的“连接跟踪”特性建立直连 需要第三方服务器协助“牵线” 四、常用的内网穿透工具 1. frp(Fast Reverse Proxy) frp是一款开源、高性能的反向代理应用,支持 TCP...2. ngrok ngrok支持 HTTP、TCP 等协议的内网穿透,提供公网访问地址,适合临时调试和演示,有官方和第三方开源版本,商业版可直接使用。 3....花生壳(Oray) 国内知名的内网穿透服务,它可以将位于内网的设备或服务暴露在公网上,使用户可以通过公网访问这些设备或服务,提供客户端和云端服务,适合小白用户 4.