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