2 个版本
0.1.1 | 2024年2月7日 |
---|---|
0.1.0 | 2024年2月7日 |
#1644 in 网络编程
用于 sthp
44KB
847 行
socksprox
简单的 Rust SOCKS5 代理服务器。可能不应该使用它,但你可以。
一个非常简单,功能不足的异步 SOCKS5 服务器。目前仅支持 CONNECT 命令(TCP)和有限的认证(用户名/密码)。也支持无认证。
但为什么
你为什么要使用这个?你可能不需要,更好的实现存在。但是,如果你想找到一个简单易用的 SOCKS5 库,那么你找到了。这可以(连同提供的二进制文件)快速轻松地部署一个 SOCKS5 服务器。
要在自己的二进制文件中使用,你只需要 tokio 运行时。使用 anyway 来处理错误也很方便,可以轻松处理库提供的错误。二进制文件的主函数在其早期阶段看起来像这样
use socksprox::Socks5Server;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let mut server = match Socks5Server::new("0.0.0.0", 4444, None, None).await {
Ok(s) => s,
Err(e) => { return Err(anyhow::anyhow!("Error starting server: {e}")); }
};
server.serve().await;
Ok(())
}
安装
将库添加到您的项目中,可以使用以下方式快速将 Socks5 代理添加到现有代码中
cargo add socksprox
要运行提供的二进制文件,使用 cargo
安装它
cargo install socksprox
要从源代码构建(您实际上是通过 cargo install
来做的)
git clone https://github.com/carterburn/socksprox.git
cd socksprox
cargo build --release
如果您已安装必要的 Rust 工具链,可以使用标准的 cargo
参数为不同的操作系统/架构编译。
贡献
PR 欢迎提交。以下是一些可能不错的特性
- UDPAssociate
- 绑定
- 超过用户名/密码认证
- 更好的参数处理
- 为服务器提供泛型实现(不要将 TcpStream 编硬,而是使用 Tokio 的 AsyncRead/WriteExt 作为特质界限)
致谢
我向 merino(另一个 Rust 中的 SOCKS5 实现)寻求了一些帮助,可以在 这里 找到。设计大致相同,这里或那里有一些我添加的调整。我添加的“附加功能”可能不正确或不符合行业标准,但我尽力了。如果 clippy 没有抱怨,我认为它是完美的。
SOCKS5 的 RFC 很容易理解,因此这是在 Rust 中实现网络协议的良好开端。 RFC1928
仍然在问为什么
我正在尝试学习如何使用tokio,需要一些小型的项目来开始实践。🧑🔧 期望未来能够使用tokio开发出更好的项目。必须从某个地方开始。
依赖项
~6–15MB
~180K SLoC