5 个版本
| 0.1.4 | 2020 年 9 月 20 日 | 
|---|---|
| 0.1.3 | 2020 年 9 月 17 日 | 
| 0.1.2 | 2020 年 9 月 13 日 | 
| 0.1.1 | 2020 年 9 月 1 日 | 
| 0.1.0 | 2020 年 8 月 31 日 | 
#11 在 #socket-address
每月 46 次下载
22KB
502 行
用 Rust 编写的异步 SOCKS5 代理服务器/客户端
示例
以下示例通过 SOCKS5 代理服务器向 google.com 发送简单的 HTTP 请求。
use socks5_async::{SocksStream, TargetAddr};
use std::{
    boxed::Box,
    error::Error,
    net::{SocketAddr},
};
use tokio::prelude::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // Enter a valid SOCKS5 server
    let proxy_addr: SocketAddr = "127.0.0.1:1080".parse().unwrap();
    // Send request to google.com
    let target_addr = TargetAddr::Domain((String::from("google.com"), 80));
    
    // Pass Some((String, String)) to authenticate with username & password
    let userpass = None;
    // Connect to server
    let mut stream = SocksStream::connect(proxy_addr, target_addr, userpass).await?;
    // Send a simple HTTP request
    stream.write(b"GET / HTTP/1.1").await?;
    stream.write(&[0x0d, 0x0a, 0x0d, 0x0a]).await?;
    
    // Read response
    let mut buf = [0; 256]; // 256 bytes => only read few first headers
    stream.read(&mut buf).await.expect("Unable to read the response");
    println!("{}", std::str::from_utf8(&buf).unwrap());
    Ok(())
}
待办事项
- 服务器
- 客户端
-  SOCKS5命令-  CONNECT
-  BIND
-  UDP ASSOCIATE
 
-  
-  SOCKS5认证方法-  NO AUTHENTICATION
-  USERNAME/PASSWORD
 
-  
依赖
~4MB
~64K SLoC