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 次下载

MIT 协议

38KB
1K SLoC

proxie:Rust crate用于SOCKS/HTTP代理客户端

proxie为将SOCKS/HTTP客户端代理集成到现有的socket程序提供了一套API,支持tokioasync-std和同步的std::net运行时。docs.rs

Crate License: MIT

警告:此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