go内网穿透小demo


最近做了一个go的toy内网穿透,本来是看了别人的代码跟着抄了一遍,但是仿佛就是不过脑子,跑是能跑了,事后再思考其中的细节却想不明白。

于是就自己敲了一个,也是大量借鉴了原来的思路,两三百行代码其中也遇到了好几个问题,也是一个个解决了。本来我的目标就是有点兴趣,理解其中一种技术方案,能写出来跑通,就够了,不管是不是最优。

总体架构图:

image-20221215100540851

就是服务端和server端,client负责与实际的本地端口通信,并和服务端的data port传输数据,server监听remote端口(也就是内网端口映射至公网的端口)后,如果收到用户请求,就通知client,建立一条隧道,就是图中的蓝线或者黄线部分。数据转发用的是io.Copy

参考文献:

github: out-go