从0到1实现内网穿透

什么是内网穿透我也就不过多解释了,能进来看的应该都不需要解释,我就直接从我理解的来开始。

1. 原理

简单而言,我们要实现的效果就是用户访问服务端的54512端口就想是在访问客户的3306端口一样。

客户端注册

最重要的当然是客户端与服务端建立连接(这个连接可以是纯tcp,也可以是http,websocket都行,只要能相互通信即可),客户端需要告诉服务端我想暴露哪些端口,然后服务端就会监听对应数量的端口(这个地方可以优化为服务端只监听一个端口)。

这时候就已经完成了客户端的注册。

用户访问

如果用户现在访问服务端的49875端口,如果想要正确的转发到客户端的9527端口应该怎样做呢?

  1. 用户的请求数据与当前服务端的端口一起发送到客户端
    1. 为什么要发送当前服务端的端口? 因为要告诉客户端当前用户具体要访问的是哪个端口,我们前面返回给客户端端口映射关系。
  2. 客户端接收到请求后,查询端口映射关系,然后连接到对应的9527上去,并发送服务端发送过来的用户的请求数据
    1. 比如说是http请求的话 可能是这样的 GET /XXXX HTTP/1.1 HOST: XXXX User-Aagent: xxx
  3. 9527根据对应用户请求数据做出响应,然后发送到与客户端建立的连接中
    1. 比如说一个http response `HTTP/1.1 200 OK content-length:xxx \r\n helloworld\r\n`
  4. 最后客户端将9527的响应数据转发到服务端,服务端又转发到用户。
  5. 然后就是重复1~4

可以说是很清楚了!!!

原文档地址:从0到1实现内网穿透 · 语雀什么是内网穿透我也就不过多解释了,能进来看的应该都不需...https://www.yuque.com/fzdwx/gkcohs/gg3k2e

源码项目地址:GitHub - fzdwx/burst: 🏃 内网穿透 or 反向代理 (Intranet to public network or reverse proxy)

后面可能会考虑出源码从0到1写完一个简版的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值