1 个不稳定版本
0.8.1 | 2022 年 8 月 10 日 |
---|
#6 在 #socks
123 每月下载次数
93KB
2K SLoC
使用 async/.await 的 SOCKS5 客户端/服务器库
特性
- 一个
async
/.await
SOCKS5 实现。 - 一个
async
/.await
SOCKS4 客户端 实现。 - 一个
async
/.await
SOCKS4a 客户端 实现。 - 无 不安全 代码
- 基于
tokio
库构建 - 极轻量级且可扩展
- 无系统依赖
- 跨平台
- 认证方法
- 无认证方法
- 用户名/密码认证方法
- 可以通过 Authentication Trait 实现自定义认证方法
- 映射所有 SOCKS5 RFC 错误(响应)
- Socks5Stream & Socks5Socket 上实现了
AsyncRead + AsyncWrite
特性 - 支持
IPv4
、IPv6
和Domains
类型 - Socks5Server 的配置助手
- 通过
incoming.next().await
以类似于 "std's TcpStream" 的方式运行 Socks5Server 的助手 - 示例包含真实案例命令场景
- 可以禁用
DNS 解析
- 可以跳过认证/握手过程,这将直接处理命令请求(在当前已认证环境中,这有助于节省无用的往返次数)
- 可以禁用命令执行(如果您只想将请求转发到不同的服务器,这很有用)
安装
在 crates.io 中打开。
示例
请检查 examples
目录。
# Run client
RUST_LOG=debug cargo run --example client -- --socks-server 127.0.0.1:1337 --username admin --password password -a perdu.com -p 80
# Run server
RUST_LOG=debug cargo run --example server -- --listen-addr 127.0.0.1:1337 password -u admin -p password
# Test it with cURL
curl -v --proxy socks5://admin:[email protected]:1337 https://ipapi.co/json/
待办事项
- 必须实现测试
- 更好的 Rust 文档
- 未实现 UDP 绑定命令
受以下启发
感谢所有这些 SOCKS5 项目
- https://github.com/sfackler/rust-socks/blob/master/src/v5.rs
- https://github.com/shadowsocks/shadowsocks-rust/blob/master/src/relay/socks5.rs
- https://github.com/ylxdzsw/v2socks/blob/master/src/socks.rs
进一步考虑
- 使用Tokio-codec实现 https://github.com/yfaming/yimu-rs/blob/master/src/socks5.rs
依赖关系
~3–15MB
~138K SLoC