加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

内网穿透工具的原理与开发实战

发布时间:2019-06-01 19:12:49 所属栏目:建站 来源:昌维
导读:前言 在我国,由于网民众多,运营商无法保证为每一个宽带用户提供全球唯一的公网IPv4地址。因此很多用户会发现通过路由器端查看到的WAN端IP与百度IP关键词所得到的IP不一致,并且前者的IP为一个私有IP。 而还有一些情况下,公网IP比较昂贵,企业虽然本身也

这里要注意io.Copy函数是同步阻塞的,意味着只要连接没有断开,那么程序执行流将一直卡在这个函数。如果拷贝出错,那么io.Copy函数就会返回,也就是执行他下面的代码。拷贝出错意味着可能连接已断开,那么先把写入流的连接断掉。

这里要重点注意,为什么是断开写入流而不是读写流全部断开呢。因为我们前面发射了两个Goroutine,如果盲目全部断开,将会导致另一个Goroutine中可能还有未写完的数据丢失。具体可以根据TCP四次挥手来分析。

实际执行

如果没有Golang环境的朋友可以直接下载编译好的可执行文件,下载地址:https://github.com/cw1997/NATBypass/releases

内网穿透工具的原理与开发实战

我们先来看看代码编译之后实际运行,上图左边为虚拟机跑的内网服务器,他已经设置了入站规则,通过直接连接192.168.2.112:3389是无法连上远程桌面的。

此时此刻右图开始通过listen命令监听7777和9999端口。

内网穿透工具的原理与开发实战

接着内网服务器再通过slave命令开始双向连接黑客的主机(右图的192.168.2.101:7777)以及本地的127.0.0.1:3389。

然后黑客的主机上连接本地监听的另一个端口127.0.0.1:9999即可连接上内网服务器的远程桌面。

内网穿透工具的原理与开发实战

大家可以根据netstat -an的结果以及控制台日志输出来综合理解这个过程。

内网穿透工具的原理与开发实战

写在最后

这个工具现在实现的仍然只是简单的透明传输,并且存在诸多问题。比如说本地主动连接内网服务是一开始就预连接好的,这样会导致一些服务如果在连上之后长期没有数据传输,会主动断掉连接,导致公网端偶尔出现无法连接上,要重新断开重连后才能连上的小BUG,具体在HTTP服务器要多刷新几次页面,远程桌面则可能要连接上然后又取消,然后再连才能连上。而且在并发连接上处理还有一些细节没有做好。并且目前还仅仅支持TCP连接的转发等等,当然要实现UDP的转发也不是很困难稍加改进即可。大家也可以点个star,提个pull request一起来改进这些问题。目前相关的开源项目也有做的比较成熟的,比如说Golang写的ngork,大家也可以参考参考。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读