本文将介绍三种常用的网络穿透技术:TCP 打洞、UDP 打洞和 UPnP。 一、TCP 打洞 1.1 什么是 TCP 打洞?...1.3 示例代码 以下是一个简单的 Python 示例,演示了通过 TCP 打洞进行连接的过程。...什么是 UDP 打洞?...UDP 打洞(UDP Hole Punching)与 TCP 打洞类似,是一种让处于 NAT 后的两台主机通过第三方服务器建立直接 UDP 连接的技术。...UDP 打洞:类似 TCP 打洞,但使用 UDP 协议,更容易成功。 UPnP:通过自动化的端口映射,使内网设备更易于被外部设备访问。
接着补充几个点,比如内网穿透和内网打洞的概念,其实NAT也是内网穿透和内网打洞的基础,所以介绍了NAT之后理解内网穿透和内网打洞会容易很多。 最后补充一个代理的内容,我们的网络原理部分就算是结束了。...内网打洞 对于内网穿透和内网打洞来说其实都是基于NAT来看的,但是二者解决的问题不同,对于内网穿透来说解决的是两台主机无法直接通信的过程,不过在现在网络世界中,内网穿透实际上是非常非常非常常见了,可以说内网穿透已经是隐形实施的技术了...但是对于内网打洞不一样,内网打洞的技术要求较为复杂,目前只有特殊情况才能使用。...所以对于内网穿透和打洞来说,一个是通过服务器中转,一个是通过服务器建立一条信道,如下表: 项目 打洞(Hole Punching) 内网穿透(NAT Traversal) 目标 实现 P2P 通信(点对点直连...) 让外部访问内网服务 是否依赖服务器 仅用于“打洞阶段”,成功后不再依赖服务器 全程依赖服务器转发或中继 通信路径 最终是客户端 客户端 最终是客户端 服务器 客户端 效率和延迟
拿三台机器举例打洞配置讲解 机器 网络环境 用途 SSH服务 A机器 公网IP固定 中转机器 需要 B机器 NAT网络 被访问机器 需要 C机器 任意网络环境 需要访问B机器 不需要 自动连接重试 需要...打洞 开启端口转发功能,编辑 sshd 的配置文件 /etc/ssh/sshd_config,增加配置: GatewayPorts yes 另一台机器连接 通过C机器对A机器的6766端口发起连接就会自动被转发到...有固定公网IP的机器 参考: http://blog.csdn.net/lidongshengajz/article/details/73482908 https://linux.cn/article
1 问题 有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。...第二行输出2个浮点数,分别为小鼠和大鼠打洞的距离,单位为尺,保留小数点后1位数字。Round(f,1)为浮点数f 保留一位小数。...day, time = 1, 1, 0, 1 #大老鼠进度,小老鼠进度,相遇时间,第一天时间 distance_of_rat, distance_of_mouse = 0, 0 # 大老鼠和小老鼠的打洞距离...while n > 0: if n - mouse - rat 打洞完成 time = n / (mouse + rat) #算出需要时间 n ...#时间过去一天 print(day) print(round(distance_of_mouse, 1), round(distance_of_rat, 1)) 3 结语 这是一道数学题,据题目描述,打洞的速度分为第一天和后几天
4、对称型:每次打洞都生成新的外网ip和端口,不能被外网主动访问。 nat穿透 局域网的A访问一个外部主机,这个主机返回A它的nat转换后的ip1 port1。...因此可以打洞。 一端对称,一端非对称:A(非对称Nat,且只能是ip不变,port变化的那种情况),一端非对称B,且只能是 full cone 或者ip受限。...基于上述理论我们可以用go来测试我们的nat类型,为打洞做准备。...,如果返回的外网ip和端口都没有变,说明是完全锥形NAT;如果失败,说明不是 III,只切换ip能成功,但是II失败,说明是端口限制NAT;如果失败,说明是ip端口限制NAT,这三种形式的nat都可以打洞
https://www.cnblogs.com/xiii/p/5052586.html
可以参考reliable-udp这个规范(搜索一下RELIABLE UDP PROTOCOL就有) UDP打洞了为了在两台局域网的机器建立好UDP连接,这个过程需要一台公网服务器支持,建立好以后就不再需要公网服务器了
上篇文章中做了UDP打洞,这篇当然就会是TCP打洞了,两个处于不同内网的两台机器如何通过TCP/IP协议进行链接通讯呢?这其实跟UDP打洞差不多,基本步骤是这个样子的。
接上次,我们在 AX9000 中安装了 Docker,我们可以用它搭建一个网盘,并且打洞映射到外网(Cloudflare Argo Tunnel) 打洞使用 Cloudflare Argo Tunnel...就是你的容器内网地址 aria2 没有映射端口,我们只要复制 cloudreve 的地址加上 5212 端口就行 接下来我们去 cloudreve 的日志中获取管理员密码 (这里是我配置好的网盘) 打洞映射...Cloudflared $ wget https://github.com/cloudflare/cloudflared/releases/download/2022.11.1/cloudflared-linux-arm64
遇此情况,用户需要在配置文件tsingsee.ini中添加相应的打洞程序即可。...科普:所谓udp打洞,就是指客户端A通过udp协议向服务器发送数据包,服务器收到后,获取数据包,并且可获取客户端A地址和端口号。...对于一些应用或者需求,需要两个客户端临时做一些通信,而这种通信不需要建立tcp就可以完成,所以才去udp打洞。...打洞程序代码如下: turn_url = "turn:turn.tsingsee.com:19302?...turn_credential = "6df2668750e68cd69d9135ccd25b703c370fe88f20adb3138dcd482cc652b187" 添加后的配置文件展示如图: 添加上述打洞程序后
1、打洞解决了什么问题? 我们平常使用的一般都为私有ip,但是私有ip之间是不能直接通信的,如果要进行通信只能通过公网上的服务器进行数据的转发,难道我们每次发送数据都要经过公网上的服务器转发吗?...此时就需要我们的打洞技术的出现了,打洞的出现解决了私有ip之间直接通信的问题(还是需要经过一次公网服务器) 例如:QQ中的聊天就广泛的使用到了打洞技术 打洞。...通过打洞服务器,将用户A映射的IP、端口信息告诉用户B即可。 如何解决第二个问题?...如果打洞服务器首先告诉用户A先发一条信息给用户B(用户A得知用户B的地址信息也是通过打洞服务器),注意此时用户B是收不到的,用户B的路由同样会进行丢弃,但是这并不要紧,因为用户A发了这条信息后,用户A的路由就会记录关于用户
Windows下我用的PowerShell 7.1.3,首先需要登录cloudflare账户,会自动打开默认浏览器登录。不建议用随机分配的域名,每次重启软件都会...
内网打洞技术实现 4.1 基本 UDP 打洞实现 下面是一个基本的 UDP 打洞实现,包含服务器端和客户端代码: # 服务器端代码 import socket import threading class...高级穿透技术 5.1 TCP 打洞技术 TCP 打洞比 UDP 打洞更复杂,因为 TCP 的三次握手过程和 NAT 的行为特性使得直接穿透更加困难。...而 UDP 打洞技术通过在 NAT 设备上建立临时映射,让内网节点直接通信,极大提升传输效率。...其核心代码利用 Socket 库,在接收到对方地址后,通过循环发送打洞包,尝试突破 NAT 限制。...WebRTC 集成了 ICE 框架,自动尝试 UDP 打洞、STUN 与 TURN 多种穿透策略。
借助 ext4 文件系统的 打洞 功能,可以实现一个消息队列 https://gist.github.com/CAFxX/571a1558db9a7b393579 1 fallocate(fd, FALLOC_FL_PUNCH_HOLE...如果用 3.15 之后的 linux kernel ,在 ext4 (only for extent-based files) 和 XFS 文件系统上, http://man7.org/linux/man-pages.../man1/fallocate.1.html http://man7.org/linux/man-pages/man2/fallocate.2.html fallocate 这个 syscall 新增了
RTC走到tsingess.com需则要走本地服务器,这里需要打洞程序,若有用户需要,可以联系我们获取。下面介绍下如何进行本地部署WebRTC。...图片4)修改完之后,Windows系统直接运行打洞程序turnservrt.exe,Linux系统则运行./turnserver即可。这里为啥要需要使用打洞程序呢?...因为有的用户使用场景不通,打洞是为了实现在纯内网环境下能使用webrtc播放。图片按照上述步骤操作后,就能实现本地WebRTC播放了。
在上线官网之前,我们已经对新的版本进行了测试,测试期间发现,接入的webrtc的打洞程序stun老是容易打洞失败,导致webrtc无法播放。...经过调研决定在easygbs中集成turn打洞程序,但是遇到一个问题就是接入的新的打洞程序中需要添加用户名和密码,然而目前的程序中是不包含的,因此需要对此处做一下优化。...我们的处理方式是在EasyGBS的ini配置文件中添加如下配置,然后再建立打洞程序的时候传入给打洞服务,参考代码如下: eturn &ConfigST{ mutex: sync.RWMutex{}
我没胆量犯错 才把一切错过 --- 林夕 《我对不起我》--- 一文了解NAT机制,代理服务,内网穿透 1 再谈 NAT 机制 2 内网穿透与内网打洞 3 代理服务器 1 再谈 NAT 机制...Linux服务上的实际获取到的IP是出入口路由器的WAN口IP 2 内网穿透与内网打洞 如果今天可以做到: 首先我们拥有一个云服务器....并且我们在内网构建一个Linux机器,使用22端口部署了一个ssh服务,可以与云服务器建立一个连接。...云服务器也部署一个服务,可以将机器上所以8888端口获取的数据,可以转到内网的Linux服务器上!...这种技术就叫做内网打洞!这样就直接跨过了云服务器,在出入口路由器上打了一个洞,可以直接进行访问! 一些出入口路由器是不允许进行内网打洞,这里我们了解其原理就可以了!
Cone 使用 Natter 进行映射 # 本部分书写于 Natter v2.1.1 如果你要使用 Natter,请使用 v2 而不是 v1 由于 Natter 支持 Windows,我们就不需要 Linux...Natter 需要 Python 环境,请提前安装 下载 Natter 克隆仓库 git clone https://github.com/MikeWang000000/Natter.git 打洞...我们可以直接使用 python natter.py -m test 来测试是否打洞成功 Natter 打洞成功输出 命令行参数 # 详细可以查看 Natter - 参数说明,此处介绍一些基本参数 -...需要注意的是,socket, gost 和 socat 都无法保留源 IP,转发所属的应用程序无法获得访客的真实 IP 和端口 使用 natmap 进行映射 # natmap 仅支持 Linux...20240603 版 首先从 release 上下载 wget https://github.com/heiher/natmap/releases/download/20240603/natmap-linux-x86
Tailscale是一个与ZeroTier、Netbird等工具类似的异地组网工具,支持通过STUN打洞实现客户端点对点直连,互联协议基于go实现的WireGuard,兼具高效与安全的特性。...若打洞成功,两端将在Headscale服务器引导下绕过服务器建立点对点的直连隧道;若打洞失败,两端将保持通过DERP服务器中继的互联模式。...在博主实测中,办公室校园网(NAT3)与中国电信5G(NAT3)能够正常打洞直连,而办公室校园网(NAT3)与某园区网(NAT4)无法打洞直连,完全通过中继连接,只有对端为中国移动(NAT1)时成功打洞直连...NAT4即对称型NAT,是NAT四种类型中最为严格的一种,其从原理上阻止了打洞的可能性,因此Tailscale在这类网络下只能提供基于服务器中转的连接。...以下是一个带有注释的完整headscale 0.23.0版本配置文件,从个人用户手动维护的角度出发,博主建议不遵循Linux社区的配置规范,将所有相关的文件安放于同一目录下(如配置中的/home/headscale
它还有一个别称叫「鼹鼠蟹」,因为它们会像鼹鼠一样在沙滩上垂直向下打洞,以躲避危险。...这种「会打洞」的特性引起了加州大学伯克利分校研究人员的注意,他们仿照浪花蟹研发了一个名为 EMBUR 的挖掘机器人,旨在用作评估农业场地土壤、收集海洋数据、研究建筑工地土质的工具。
领取专属 10元无门槛券
手把手带您无忧上云