socks5x 0.1.3

A simple, async SOCKS5 proxy library for Rust
Documentation
use socks5x::Socks5Address;
use socks5x::client::Socks5Client;
use tokio::io::{AsyncReadExt, AsyncWriteExt};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Socks5Client::connect(
        "127.0.0.1:1080",
        None, // Some(("admin".to_string(), "secret".to_string())),
    )
    .await?;

    // Request connection to destination
    let mut stream = client
        .request_connect(Socks5Address::from("httpbin.org"), 80)
        .await?;

    // Use the stream normally - data is transparently proxied
    let request = "GET /ip HTTP/1.1\r\nHost: httpbin.org\r\nConnection: close\r\n\r\n";
    stream.write_all(request.as_bytes()).await?;

    let mut response = Vec::new();
    stream.read_to_end(&mut response).await?;
    println!("Response: {}", String::from_utf8_lossy(&response));

    Ok(())
}