1个不稳定版本
0.1.0 | 2023年12月11日 |
---|
#16 在 #socks5
每月175次下载
在 5 个crate中使用 (通过 sidevm-host-runtime)
11KB
174 行
tokio-proxy
这个简单的库可以帮助通过代理(目前仅支持SOCKS5)进行tokio TCP连接。
connect
函数与TcpStream::connect
类似,额外参数用于指定代理URL字符串。
pub async fn connect<A: ToSocketAddrsExt, T: AsRef<str>>(
addr: A,
proxy_url: T,
) -> io::Result<TcpStream>
示例
您可以在examples/env_proxy.rs中查看。
它检查环境变量all_proxy
作为代理URL,如果不存在,则直接连接到httpbin.org。
rt.block_on(async move {
let mut s = match env::var("all_proxy") {
Ok(proxy) => tokio_proxy::connect("httpbin.org:80", proxy).await.unwrap(),
Err(_) => TcpStream::connect("httpbin.org:80").await.unwrap(),
};
s.write_all(
b"GET /get HTTP/1.1\r\n\
Host: httpbin.org\r\n\r\n",
)
.await
.unwrap();
let mut buf = [0; 512];
s.read(&mut buf).await.unwrap();
for line in str::from_utf8(&buf).unwrap().lines() {
println!("{}", line);
}
});
如果代理URL使用socks5
方案,则会在本地解析域名,并对所有解析出的IP地址进行迭代,直到成功或全部失败。
如果代理URL使用socks5h
方案,则将域名直接发送到代理。
这与curl的行为类似。
$ all_proxy=socks5h://127.0.0.1:8080 cargo run --example env_proxy
Finished dev [unoptimized + debuginfo] target(s) in 0.24s
Running `target\debug\examples\env_proxy.exe`
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
...
依赖关系
~3.5–10MB
~109K SLoC