#socks5-proxy #proxy-server #tcp #authentication #error #async #connect

bin+lib socksprox

简单的 Rust SOCKS5 代理服务器。可能不应该使用它,但你可以。

2 个版本

0.1.1 2024年2月7日
0.1.0 2024年2月7日

#1644 in 网络编程


用于 sthp

MIT 许可证

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