源码已经发布在 Github: https://github.com/cnbatch/cpp20-socks5demo
RFC 1928 要求的功能几乎都实现了。
支持的功能:
- IPv4
- IPv6
- ‘No Auth’ 认证模式
- 用户名 / 密码 认证模式
- TCP
Connect - TCP
BIND - UDP
Associate
未实现的功能:
- GSSAPI 认证模式
Socks5 标准 (RFC 1928) 写着必须实现这个功能,然而我做的只是个 Demo 程序,平时也用不到 GSSAPI ,为了简单起见就不实现了。
已在这些系统测试过:
- Windows 11 + VS2022
- FreeBSD 13.4
- FreeBSD 14.2
- Debian 12
用协程写代码的体验
用了协程之后,思路清晰多了,不像 callback 时那么头大,相对而言轻松多了。
Github 就有一大堆 Socks5 Server 程序,为什么又造了个新的?
两大原因:
-
我自己是 Windows + FreeBSD 用户,正好需要这样的 socks5 server 程序——可以同时在 Windows 与 FreeBSD 运行,能够支持 TCP + UDP, IPv4 + IPv6 ,使用相同的运行配置方式。
虽然平时 socks5 server 主要在 FreeBSD 当中运行,但稳妥起见也要在 Windows 台式机运行同样的程序,用作 backup 方案。
最重要的一点,两个平台都要采用 Native 编译方式,而不是单纯的“妥协”编译方式。直白点说就是:- Windows 可以用 MSVC 直接编译,不需要经过 Cygwin / MinGW 绕一层。
- FreeBSD 可以用内置编译器 + BSD Make 直接编译(即使是 cmake 生成的),不需要 GNU Make ,不需要额外再安装编译器。
-
一直想试试 ASIO 库的协程模式,毕竟写起来流畅多了。我个人记忆力不太好,callback 数量一多就头大,实在记不过来。趁着有需求,正好拿来试一试。
小提示
由于这个程序只是个 Demo ,用是能用。只不过暂时不支持侦听到具体的地址,不提供日志记录,连接超时的时间判断是硬编码的。如果要其他额外功能都实现的话,就不能单靠一个源文件了,只能另开新 repo 把各部份拆开来重新梳理一遍。以后再在新 repo 内慢慢拆、慢慢补。