5个版本
0.1.1 | 2023年3月23日 |
---|---|
0.1.0 | 2023年3月15日 |
0.0.2 | 2023年3月14日 |
0.0.1 | 2023年3月14日 |
0.0.0 | 2023年2月17日 |
#26 in #socks5-proxy
每月 23 次下载
38KB
1K SLoC
proxie:Rust crate用于SOCKS/HTTP代理客户端
proxie
为将SOCKS/HTTP客户端代理集成到现有的socket程序提供了一套API,支持tokio
、async-std
和同步的std::net
运行时。docs.rs
警告:此crate仍在积极开发中。API在未来可能会更改。
示例
proxie
旨在提供一组API,对应其运行时的原生API。以下是一个使用tokio
通过SOCKS5代理发送HTTP请求的示例
use tokio::io::{AsyncWriteExt, BufReader, AsyncBufReadExt};
use futures::future;
use proxie::{SOCKS5Proxy, tokio::AsyncProxy, Auth};
#[tokio::main]
async fn main() {
let n_thread = 10;
let mut handles = vec![];
for _ in 0..n_thread {
handles.push(tokio::spawn(async {
let server = SOCKS5Proxy::new("127.0.0.1", 1080, None);
let mut stream = server.connect("example.com:80").await.unwrap();
//let mut stream = TcpStream::connect("example.com:80").await.unwrap();
stream.write_all(b"GET / HTTP/1.1\r\n\r\n").await.unwrap();
stream.flush().await.unwrap();
let mut reader = BufReader::new(&mut stream);
let mut buffer = String::new();
loop {
reader.read_line(&mut buffer).await.unwrap();
if buffer.ends_with("\r\n\r\n") {
print!("{}", buffer);
break;
}
}
}));
}
future::join_all(handles).await;
}
此crate将TcpStream
创建过程替换为两行。无需其他修改。
要使用用户名和密码认证,只需导入proxie::Auth
并使用此行创建代理服务器实例
let server = SOCKS5Proxy::new("127.0.0.1", 1080, Auth::new("user", "pass"));
要为每个运行时启用支持,请将相应的功能添加到您的Cargo.toml
proxie = { version = "0.1.0", features = ["enable_tokio"] }
# Features currently available are: "enable_sync", "enable_tokio", and "enable_async_std".
功能和待办事项
运行时支持
- 同步的
std::net
-
tokio
-
async-std
协议支持
- HTTP CONNECT
- SOCKS5 CONNECT
- SOCKS5 BIND
- SOCKS5 UDP ASSOCIATE
- SOCKS4a
- HTTPS CONNECT
- 链式代理
其他工作
- 文档
- 完整的
TcpStream
方法实现 - 单元测试
开发
已对当前功能进行了基本测试,但无法保证一切都能正常工作。也无法保证当前的API将永远保持不变,尽管我会尽力保持其稳定性。有关错误报告、功能请求和任何其他建议,请使用GitHub问题或直接与我联系。
许可证
MIT
依赖项
~0.3–12MB
~123K SLoC