V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
qgy18
V2EX  ›  分享创造

实现了一个从公网访问内网 WEB 的简单工具

  •  
  •   qgy18 · 2015-11-24 13:52:53 +08:00 · 8650 次点击
    这是一个创建于 3286 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是上周末为了验证一个想法,花了一个小时撸的一个从公网访问内网 WEB 服务的「玩具」,使用 HTTP/2 实现公网与内网之间的 HTTP/1.1 转发。基于 node-http2 模块, client 加 server 不超过 200 行,除了 Node.js 无需其它依赖, git clone 下来就能跑。

    https://github.com/qgy18/pangolin

    简单说就是这个东西能实现 ngrok 功能之一:让你的本机 WEB 在外网可以访问。临时共享点东西给好友,或者做微信调试还是很方便的。当然 ngrok 是 TCP 转发,能干的远远不是这个。

    最后广告下:最近我又写了不少跟 HTTP/2 有关的文章,有兴趣的同学可以关注下: https://imququ.com

    第 1 条附言  ·  2015-11-24 20:05:39 +08:00
    那干脆把这个也丢上来吧 —— Node.js 实现两种 WEB 代理的演示程序:

    https://github.com/qgy18/proxy-demo

    别看代码简单,不足百行,但非常稳定,特别节省资源,已经在我的搬瓦工测试了快一周。
    36 条回复    2018-11-02 15:11:15 +08:00
    lijinma
        1
    lijinma  
       2015-11-24 13:54:03 +08:00
    谢谢 ququ
    songjiaxin2008
        2
    songjiaxin2008  
       2015-11-24 14:09:53 +08:00 via iPhone
    点赞
    oott123
        3
    oott123  
       2015-11-24 14:13:15 +08:00 via Android
    赞~~
    不过感觉还不如用 ssh 转发来的方便 _(:з」∠)_
    qgy18
        4
    qgy18  
    OP
       2015-11-24 14:17:41 +08:00
    @oott123 理论上用 HTTP/2 做转发会省一点点流量,因为单 TCP 上多路复用,是可以用到 HTTP/2 的头部压缩策略。这个也是我想验证的点,但是还没来得及做对比。
    KenGe
        5
    KenGe  
       2015-11-24 14:18:56 +08:00
    老大想跟你探讨点问题呀
    odirus
        6
    odirus  
       2015-11-24 14:20:19 +08:00
    活捉一枚 360 员工,哈哈,其实我还是挺欣赏贵司的。
    qgy18
        7
    qgy18  
    OP
       2015-11-24 14:35:14 +08:00
    @odirus 看我的博客关于页:「声明:本站所有文章均为本人原创,仅代表个人思想,与其他任何人或组织无关!」
    odirus
        8
    odirus  
       2015-11-24 14:43:13 +08:00
    @qgy18 没别的意思哈
    qgy18
        9
    qgy18  
    OP
       2015-11-24 14:53:10 +08:00 via iPhone
    @odirus :)
    Lenhoon
        10
    Lenhoon  
       2015-11-24 15:08:20 +08:00
    Python 的 paramiko 库有个 Demo 是用 ssh 建立隧道做远端转发的实现的,楼主的思路也不错!顶
    zonghua
        11
    zonghua  
       2015-11-24 15:11:02 +08:00 via iPhone
    @Lenhoon 哈哈,看到他讲 http 代理的文章,我中午提议给博主,然后他过了一会就做出来了。
    zonghua
        12
    zonghua  
       2015-11-24 15:12:19 +08:00 via iPhone
    @oott123 ssh 转发很不稳定,丢包什么的
    qgy18
        13
    qgy18  
    OP
       2015-11-24 17:39:23 +08:00
    @KenGe 啊,什么问题啊?
    inmyfree
        14
    inmyfree  
       2015-11-24 17:41:56 +08:00
    活捉一枚 360 员工
    KenGe
        15
    KenGe  
       2015-11-24 18:00:21 +08:00
    @qgy18 给你写信咯
    bazingaterry
        16
    bazingaterry  
       2015-11-24 18:37:16 +08:00
    谢谢!正用得上!
    qgy18
        17
    qgy18  
    OP
       2015-11-24 18:52:50 +08:00
    @KenGe 然后并没有收到。。。我的邮箱是 [email protected]
    maskerTUI
        18
    maskerTUI  
       2015-11-24 18:54:42 +08:00
    稳定性如何?多连接会不会很容易崩掉?
    k9982874
        19
    k9982874  
       2015-11-24 18:56:37 +08:00
    挺好的东西。现在懒得写东西了 scp 或者 openvpn 跳板机搞定。
    k9982874
        20
    k9982874  
       2015-11-24 18:57:30 +08:00
    @Lenhoon 有 ssh 就直接 scp 啊,转发个毛线啊。。
    qgy18
        21
    qgy18  
    OP
       2015-11-24 19:12:23 +08:00
    @k9982874 这个主要不是用来传文件。典型应用场景是你在本地开发 WEB 网站,遇到点 BUG ,要找个人帮你看看,你可以使用这个工具直接给他一个公网地址,他可以直接访问到你的本地环境。
    dreammes
        22
    dreammes  
       2015-11-24 19:38:56 +08:00 via iPhone
    不错
    qgy18
        23
    qgy18  
    OP
       2015-11-24 21:23:09 +08:00 via iPhone
    @maskerTUI 没有仔细测,感觉 node.js 处理网络还比较稳定。我 Append 的那个程序,跑了快一周没出任何问题。
    welefen
        24
    welefen  
       2015-11-25 09:03:19 +08:00
    赞一个,非常好用的东西
    nealnote
        25
    nealnote  
       2015-11-26 10:39:15 +08:00
    proxy-demo 看起来很不错的样子。
    qgy18
        26
    qgy18  
    OP
       2015-11-26 12:02:32 +08:00 via iPhone
    @nealnote 嗯,可以试试!主要是省内存、稳定。简介我写得很低调,自己用了一周了。
    wkc
        27
    wkc  
       2015-11-29 19:00:51 +08:00   ❤️ 2
    分享下相关的资料

    http://dog-tunnel.tk/ DOG TUNNEL - P2P 端口映射 ,非常强大

    https://github.com/hashicorp/yamux 单 TCP 上多路复用的一个库

    https://github.com/koding/tunnel koding 开源的从公网访问内网 WEB 的库
    wkc
        28
    wkc  
       2015-11-29 19:04:45 +08:00
    对于这种代理,因为数据经过多次转发,感觉减少延时比流量压缩什么的 重要多了。

    dog-tunnel 这种 udp 打洞的方式速度是最快的,虽然实测稳定性不咋地
    wkc
        29
    wkc  
       2015-11-29 19:11:56 +08:00
    以前做过这方面的尝试,都是基于 koding/tunnel 这种思路来做的。

    采用 TCP 隧道同样也可以打印出来 Request/Response 的,流量 copy 一份交给相关库去解析就行了。
    qgy18
        30
    qgy18  
    OP
       2015-11-29 19:50:57 +08:00 via iPhone
    @wkc 看了一下 Yamux ,发现它借鉴了 SPDY ,也就是 HTTP/2 的前身,难怪看着这么熟。

    话说,我有个需求,但是没想到好的实现方式,你有思路么?

    需求是我的手机连接 PC 共享的热点后,如果在 PC 开一个 Proxy ,修改手机网络走 PC 的 Proxy ,很容易抓取并替换 HTTP 数据包(这也是 Fiddler 或者 Charles 的工作原理)。

    但是有些手机软件不走系统代理,我在想是否可以直接从网卡下手抓取并替换 HTTP 包。 Wireshark 可以抓包,但是貌似不能替换。
    wkc
        32
    wkc  
       2015-11-29 22:25:19 +08:00
    @qgy18
    还有一个, PC 开 shadowsocks server , 手机 ss 客户端连上去。 这样就把流量导到 shadowsocks server 了。然后改 shadowsocks server 的源代码 或者用 proxychains4 等工具把流量弄到 Fiddler 上去。
    安卓的 ss 客户端记得把 shadowsocks 封成了 vpn 实现全局代理。
    直接用改路由表、改 iptables 应该也有办法, 不过我不熟悉这方面。
    qgy18
        33
    qgy18  
    OP
       2015-11-29 23:09:40 +08:00 via iPhone
    @wkc 多谢 改 dns 这个应该靠谱 我研究下
    susu
        34
    susu  
       2015-12-01 19:35:48 +08:00 via iPhone
    竟然看到了罗田的
    domwang
        35
    domwang  
       2018-05-02 13:08:29 +08:00
    国内貌似不能用了,没有 Holer 好用
    https://github.com/Wisdom-Projects/holer
    wdom
        36
    wdom  
       2018-11-02 15:11:15 +08:00
    建议使用开源的 holer,配置简单,设置一个 key 就搞定了,毫无技术含量。服务器在国内,速度很快。
    https://github.com/wisdom-projects/holer
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2763 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 13:22 · PVG 21:22 · LAX 05:22 · JFK 08:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.