socks5-proxy 0.1.1

socks5-proxy is a socks5 library based on tokio offering both server and client functions
Documentation

socks5-proxy

socks5-proxy is a socks5 library based on tokio offering both server and client functions.

Usage

Add this to your Cargo.toml dependency

socks5-proxy = "0.1"
tokio = { version = "1", features = ["full"] }
anyhow = "1.0"

Server

use anyhow::Result;
use socks5_proxy::server;

#[tokio::main]
async fn main() -> Result<()> {
    let s = server::new("127.0.0.1:8080".parse()?, None)?;
    s.run().await?;

    Ok(())
}

Client

use anyhow::Result;
use socks5_proxy::{client, Addr};
use tokio::io::{AsyncReadExt, AsyncWriteExt};

#[tokio::main]
async fn main() -> Result<()> {
    let mut client = client::new(
        "localhost:1080",
        &Addr::HostnamePort("www.google.com:80".into()),
        None,
    )
    .await?;

    client.write_all(b"GET / HTTP/1.0\r\n\r\n").await?;
    let mut buffer = Vec::new();
    client.read_to_end(&mut buffer).await?;
    println!("{}", String::from_utf8_lossy(&buffer));

    Ok(())
}

Improvement

All kinds of issues and PRs are welcome!