Http协议内网穿透的实现

把内网某个nat设备下的web服务要暴露给公网访问该怎么做?比较常见的方式有动态域名(花生壳之类)、端口映射(Ngrok……)等。
我们都知道http协议是基于tcp协议的,tcp可以“打洞”,为什么HTTP不可以呢?
曾经为这个问题google了好久都没找到解决方案。
网络上找到的udp以及tcp打洞的教程很多,这里不再详细说明
http://www.brynosaurus.com/pub/net/p2pnat/ 这个网站有详细的p2p实现原理,有兴趣的朋友自行了解。

根据tcp打洞的原理,我们实现http的穿透主要有以下难点:

基本思路:tcp打洞打通一个本地端口到对方web端口(80)的连接通道。使用该打通的端口尝试到对方web服务的http长连接请求。

这里有个巨坑,如果测试的两端在同一个NAT设备后是无法打洞成功的,所以你的Nat服务器要告诉你的客户端,它们是不是在同个域网,如果是则使用域网ip直连,不是才需要打洞。我就曾经被坑了一个多月差点放弃。后来感谢LJ电信断网了我用手机共享网络才测试成功。在此,我对爱断网的电信致以衷心的感谢。
完整的实现源码请扫码下面的二维码关注我的公众号,回复“SharpNet”,会自动给你回复源码下载地址。

本博客的内容和源码如无特殊声明都为原创,仅供学习交流,如有其他用途请事先咨询本人。

完整的源码请关注我的公众号,回复”SharpNet“查看
我的公众号

欢迎加入技术交流群:14966975

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值