FastTunnel-内网穿透原理揭秘
之前写了一篇关于GVP开源项目FastTunnel的一篇介绍 《FastTunnel-开源内网穿透框架》,只简单介绍了使用方法,不少伙伴对其原理表示好奇,今天画抽空了一下其内部实现原理流程。
不知道其他穿透软件实现是什么样子的,FastTunnel是于2020年开始编写,经过几次尝试,最终采取一种实现方案,自认是最容易理解和去实现的。
FastTunnel内网穿透实现原理图

揭开内网穿透的神秘面纱
1270端口为http监听端口,1271为客户端通信端口
- 客户端登录,将子域名web1注册到服务端,此socket一直保持在线,维持客户端和服务端的连接
- 服务端收到注册请求,创建Map集合,进行登记,此时登录完成,后面该客户端不断发起心跳互相检测
- 此时用户发起一次Http请求到1270端口,socket1
- 监听1270端口的Socket收到该请求,并为该次http请求分配全局唯一的guid,后面会用到guid;
- 读取socket1所有header,解析host内容,解析为
web1.abc.com,去查找哪个客户端注册了这个host,找不到,则客户端不在线,否则对客户端发送Swap指令,表示通知该客户端,有人要请求你内网的服务啦,请求的域名为web1; - 本次请求保存到一个KV集合中,等待客户端建立Swap连接
- 客户端收到Swap指令,创建2个临时socket分别连接本地服务SokcetY和服务端1271端口SocketZ,SocketZ连接后发送一条Swap应答指令携带guid,服务端收到此应答便知道该scoket是用于数据交换的
- SocketY与SocketZ开始接收数据,并把接收的数据互相发给对方
- 服务端收到Swap应答请求,根据guid查找KV集合,寻找等待接收响应数据的Sockt1,一旦找到,Socket1将与SocketZ进行数据互相转发。
- Socket1接收到SocketZ发来的内容,根据第5步我们知道了,SocketZ发来的内容为SocketY给发的内容,而SocketY的内容来自内网服务,经过两次数据转发,浏览器最终得到了来自内网站点的数据。
- 端口转发的实现不做介绍,其原理与以上类似。
本实现或许不是最好的实现,但是这种是我感觉最好实现和理解的一种方案,如果你有更好的实现方案,欢迎一起交流。通过以上的原理介绍,再读FastTunnel源码应该十分顺畅,项目还有很多地方需要优化,欢迎大家一起进行完善,打造.net平台最优秀的内网穿透工具。
仓库地址
FastTunnel-GitHub
FastTunnel-Gitee
SuiDao(二次开发示例)
走过路过觉得写的不错的点个star,star又不花兄弟们一分钱
有兴趣的可加qq群

声明
开源项目及文章皆为原创内容,转载或摘抄请附 原文链接
FastTunnel-内网穿透原理揭秘的更多相关文章
- 分享下超实用的用skura frp做内网穿透的经验
操作目的: 使无公网ip的主机能被外网访问,实现ssh对服务器的远程管理 硬件准备: 1.服务端:skura frp主机(skura frp 免费提供,有待创建) 2.客户端:接在无线路由器(内网)上 ...
- 手写内网穿透服务端客户端(NAT穿透)原理及实现
Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...
- 测试龙芯 LoongArch .NET之 使用 FastTunnel 做内网穿透远程计算机
龙芯3A5000 已经上市,与龙芯3A5000配套的三大编译器GCC.LLVM.GoLang和三大虚拟机Java.JavaScript..NET均已完成开发,从老伙计哪里搞来一台3A5000 机器,安 ...
- [svc]frp内网穿透
什么是穿透 可以任意暴漏内网任何服务,加入你在你的办公网络有台pc,可以上网就可以了, 你可以在你电脑上安装各类服务器, 暴漏如80 22等端口, 注意 这可以暴漏到公网哦, 在出口不做任何nat情况 ...
- 如何使用 frp 实现内网穿透
这有一个专注Gopher技术成长的开源项目「go home」 背景 作为一名程序员,家里多多少少会有一些落了灰的电脑,如果把闲置的电脑变成服务器,不仅有良好的配置,还能用来做各种测试,那就再好不过了. ...
- 基于C#的内网穿透学习笔记(附源码)
如何让两台处在不同内网的主机直接互连?你需要内网穿透! 上图是一个非完整版内外网通讯图由内网端先发起,内网设备192.168.1.2:6677发送数据到外网时候必须经过nat会转换成 ...
- frp内网穿透
原理 frp(fast reverse proxy)分为Server端和Client端,Server端安装在带有公网IP的服务器上,Client安装在内网环境但能上网的普通PC中. 流程: Serve ...
- NAT、端口映射、内网穿透、公网IP都是啥
原文地址:https://wuter.cn/1756.html/ 一.IPv4地址 IP协议是为计算机网络相互连接进行通信而设计的协议,它是能使连接到网上的所有计算机网络实现相互通信的一套规则. 这里 ...
- 基于Yarp的http内网穿透库HttpMouse
简介 前几天发表了<基于Yarp实现内网http穿透>,当时刚刚从原理图变成了粗糙的代码实现,项目连名字都还没有,也没有开放源代码.在之后几天的时间,我不断地重构,朝着"可集成. ...
随机推荐
- 重新整理 .net core 实践篇————配置系统——军令(命令行)[六]
前言 前文已经基本写了一下配置文件系统的一些基本原理.本文介绍一下命令行导入配置系统. 正文 要使用的话,引入Microsoft.extensions.Configuration.commandLin ...
- jackjson学习2+CVE-2019-14379漏洞分析
最近想着分析jackson,jackson和fastjson有点相似,浅蓝大神的文章很好,个人受益匪浅 昨天简单说了下jackson的用法,现在继续拓扑,补充前置知识,前置知识补充的足够多,那么漏洞分 ...
- 2. Servlet3.0注解方式 @WebServlet
web.xml配置还是比较麻烦,这次使用注解方式 编写servlet import javax.servlet.ServletException; import javax.servlet.annot ...
- Python+Selenium - 三种等待方式
元素:存在 > 可见 > 可用 需要判断元素状态 等待方式1:强制等待 -- 辅助 设置等待几秒,就必须等待几秒 示例: from time import sleepsleep(3) 强 ...
- HTML <a> 标签的 href 属性
w3school页面的描述: HTML <a> 标签的 href 属性 HTML <a> 标签 实例 href 属性规定链接的目标: <a href="http ...
- 利用NVIDIA-NGC中的MATLAB容器加速语义分割
利用NVIDIA-NGC中的MATLAB容器加速语义分割 Speeding Up Semantic Segmentation Using MATLAB Container from NVIDIA NG ...
- 算法编程Algos Programming
算法编程Algos Programming 不同算法的集合,用于编程比赛,如ACM ICPC. 算法按主题划分.大多数算法都可以从文件中按原样运行.每种算法都有一个参考问题,并对其时间和空间复杂度作了 ...
- 使用NVIDIA A100 TF32获得即时加速
使用NVIDIA A100 TF32获得即时加速 NVIDIA A100带来了我们公司历史上最大的单代性能增长.这是一个新的结构创新,这是一个多功能的支持,这是一个多功能的结构支持.TF32是用于深度 ...
- Springboot-Redis分布式锁 -----StringRedisTemplate
这里引用别人, 用来自己回忆 https://blog.csdn.net/jack_shuai/article/details/91986690 https://www.cnblogs.com/mox ...
- springcloud中 getway中的断言配置: Predicate 9中配置过程, getway的 filters实现限流功能:
https://www.cnblogs.com/grasp/p/11506426.html 这里引用别人的,,且试验过 ,没问题 server: port: 9527 spring: applicat ...