go内网穿透小demo
最近做了一个go的toy内网穿透,本来是看了别人的代码跟着抄了一遍,但是仿佛就是不过脑子,跑是能跑了,事后再思考其中的细节却想不明白。
于是就自己敲了一个,也是大量借鉴了原来的思路,两三百行代码其中也遇到了好几个问题,也是一个个解决了。本来我的目标就是有点兴趣,理解其中一种技术方案,能写出来跑通,就够了,不管是不是最优。
总体架构图:
就是服务端和server端,client负责与实际的本地端口通信,并和服务端的data port传输数据,server监听remote端口(也就是内网端口映射至公网的端口)后,如果收到用户请求,就通知client,建立一条隧道,就是图中的蓝线或者黄线部分。数据转发用的是io.Copy
。
参考文献:
urfave/cli库
github: out-go