现在有比较好的 NAT 穿透(打洞)开源实现吗? - V2EX
acbot
V2EX    C++

现在有比较好的 NAT 穿透(打洞)开源实现吗?

  •  
  •   acbot May 9, 2022 8507 views
    This topic created in 1464 days ago, the information mentioned may be changed or developed.

    以前早期的时候 p2p 软件的 NAT 穿透(打洞)这些感觉都是自己实现,属于比较核心的技术。现如今这么多年了,NAT 穿透(打洞)有没有比较好的 c/c++开源的实现呢,TCP 和 UDP 两种都实现的那种?网上找的都是理论验证性的代码,感觉不是太完善。

    26 replies    2023-02-14 15:01:00 +08:00
    junmoxiao
        1
    junmoxiao  
       May 9, 2022
    nebula n2n
    acbot
        2
    acbot  
    OP
       May 9, 2022
    @junmoxiao 我看这两个都是成熟的组网应用,我这边的需求是自己的软件中,可能需要涉及到 NAT 穿透这种功能,你的意思是从中剥离出我要的功能吗?
    allinQQQ
        3
    allinQQQ  
       May 9, 2022
    46fo
        4
    46fo  
       May 9, 2022
    同求 同好奇 没有比较好的开源的 p2p 库
    mjikop1231
        5
    mjikop1231  
       May 9, 2022
    felixlong
        6
    felixlong  
       May 9, 2022
    villivateur
        7
    villivateur  
       May 9, 2022 via Android
    要不看下 STUN 服务器的实现?
    nicevar
        8
    nicevar  
       May 9, 2022
    c/c++的没用过,java 版本的 stun 在某大型公司项目上用过,用于管理终端设备。
    microxiaoxiao
        9
    microxiaoxiao  
       May 9, 2022 via Android
    c/c++参考 webrtc 解决方案。具体而言:ice stun turn libnice 。完整的就是 libnice 实现了 ice ,ice 管理了 stun turn ,stun 针对能打通的情况,turn 针对打不通的情况。需要理解为啥要这么多玩意,那就看 NAT 四种类型。完整的思路就看 libnice 即可,webrtc 太复杂了
    hhjuteman
        10
    hhjuteman  
       May 9, 2022
    stun/turn
    acbot
        11
    acbot  
    OP
       May 9, 2022
    @villivateur
    @hhjuteman 大佬,这个说的太笼统了,stun/turn 网上找的都是理论验证性的代码,感觉不是太完善。因为自己不擅长网络这块所以才想找个成熟得开源库或者是可以从其他项目玻璃的模块直接用。
    acbot
        12
    acbot  
    OP
       May 9, 2022
    @microxiaoxiao 好的,我重点看一下 libnice ,谢谢!
    hhjuteman
        13
    hhjuteman  
       May 9, 2022   1
    @acbot 不知道你需要什么

    如果是理论知识
    rfc8445, rfc 5389, rfc 5766

    如果是搭建一个反射 /中继服务器,那么 coturn 无疑开源里最好的

    自己做客户端能用的库就很多了 libnice libjuice ,libnice 依赖 glib ,你能接受的话就用 libnice ,libjuice 没有实现 rfc 的 tcp 扩展,但是对接标准使用没有问题,也没有 glib 这种重依赖。
    acbot
        14
    acbot  
    OP
       May 9, 2022
    @hhjuteman 是不是 可以这样理解,自己的应用集成 libnice ,然后使用公共的 stun/turn ice 标准的服务器或者说是使用 coturn 自己搭建一个服务器, 这样的话就自己的应用就可以实现 NAT 穿透(打洞)
    sbilly
        15
    sbilly  
       May 9, 2022
    搭车问一下。golang 有比较好的实现吗? UDP TCP 都支持的
    NealLason
        16
    NealLason  
       May 9, 2022
    hhjuteman
        17
    hhjuteman  
       May 9, 2022
    @acbot 是的
    acbot
        19
    acbot  
    OP
       May 9, 2022
    @wym0823 谢谢!
    sbilly
        20
    sbilly  
       May 10, 2022
    备份一下: https://github.com/firefart/stunner

    回头看看
    hadesjaky0607
        21
    hadesjaky0607  
       May 10, 2022
    @wym0823 这个可以,不依赖平台
    openp2p
        22
    openp2p  
       May 16, 2022
    自荐一个 https://github.com/openp2p-cn/openp2p
    支持 Cone, Symmetric (NAT1-4), UPNP, IPv6
    openp2p
        23
    openp2p  
       May 29, 2022
    @sbilly https://github.com/openp2p-cn/openp2p/ UDP TCP Symmetric 打洞 UPNP IPv6 都支持
    sbilly
        24
    sbilly  
       May 31, 2022
    @openp2p 我去看看 谢谢
    libinglong9
        25
    libinglong9  
       Sep 1, 2022 via iPhone
    @openp2p server 也开源吗?
    riceball
        26
    riceball  
       Feb 14, 2023
    用于构建 P2P 网络的模块化网络堆栈和库(全): https://libp2p.io/
    包括打洞协议
    About     Help     Advertise     Blog     API     FAQ     Solana     1398 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 63ms UTC 17:07 PVG 01:07 LAX 10:07 JFK 13:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86