V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
haochen2
V2EX  ›  程序员

用 golang 实现了 全功能的 socks5 协议,同时兼容 socks4、socks4a,感兴趣的朋友一起来交流交流

  •  
  •   haochen2 · 2021-08-05 15:44:40 +08:00 · 1857 次点击
    这是一个创建于 1205 天前的主题,其中的信息可能已经有所发展或是发生改变。

    github 地址: https://github.com/haochen233/socks5.git

    第一次尝试做一个开源项目,就决定用 golang 来实现 socks5 协议。通过这个过程也学习到了不少的东西,尤其是英文文档阅读能力,为了实现地更优雅也是下了些功夫。有能改进地方的还望各位多多指点,感谢!

    第 1 条附言  ·  2021-08-05 17:57:45 +08:00
    大家看看代码,有啥可以做的更优雅的地方欢迎提出 pr 或者直接在评论区讨论:>。
    第 2 条附言  ·  2021-08-05 19:19:13 +08:00
    有客户端和服务器端的代码示例。
    12 条回复    2021-08-05 21:31:16 +08:00
    Mohanson
        1
    Mohanson  
       2021-08-05 16:07:40 +08:00
    https://github.com/mohanson/daze/blob/master/daze.go#L114-L504

    socks5udp 部分的代码是我的得意之作.
    nutting
        2
    nutting  
       2021-08-05 16:09:15 +08:00
    有个 gost,我一直在用,很强大
    privil
        3
    privil  
       2021-08-05 16:18:39 +08:00
    其实 微图瑞也实现了……这两天刚好在转换代理,各种流畅。
    haochen2
        4
    haochen2  
    OP
       2021-08-05 17:32:38 +08:00
    @privil 嗯嗯,不过威图睿里面的 socks5 没有 UDP 和 BIND 。
    haochen2
        5
    haochen2  
    OP
       2021-08-05 17:48:29 +08:00
    @Mohanson 感觉你代码里调用 panic 很危险呀
    haochen2
        6
    haochen2  
    OP
       2021-08-05 17:53:14 +08:00
    @nutting 这个应用支持的东西还挺多的,不过我们这个属于 socks 的库。
    Mohanson
        7
    Mohanson  
       2021-08-05 17:53:18 +08:00
    @haochen2 因为我可以确定如果代码走到 panic 这一行, 那么程序已经遇到了我无法解决的严重事情, 这个时候再让程序运行着已经没有必要了
    haochen2
        8
    haochen2  
    OP
       2021-08-05 18:05:47 +08:00   ❤️ 1
    @Mohanson 我觉得你这里对 socks 协议的处理还是略显粗糙,例如:不支持的地址类型,没有返回对应的错误码、socks5 服务器端不支持 BIND 也没要自己服务器直接 panic 吧,难道不需要向客户端返回 resp 吗?
    binbinyouliiii
        9
    binbinyouliiii  
       2021-08-05 18:11:05 +08:00
    我看 socks6 协议已经在制定了
    araaaa
        10
    araaaa  
       2021-08-05 18:18:26 +08:00 via iPhone
    Trim21
        11
    Trim21  
       2021-08-05 20:31:00 +08:00 via Android   ❤️ 2
    这个 append(append(append 是不是能用 buffer 之类的东西来简化…
    haochen2
        12
    haochen2  
    OP
       2021-08-05 21:31:16 +08:00
    @Trim21 对确实这块代码写法有点难以阅读, 可以用 bytes.Buffer 来简化代码。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2447 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:25 · PVG 09:25 · LAX 17:25 · JFK 20:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.