socks5-proto-0.1.0 has been yanked.
socks5-proto
This crate provides fundamental abstractions and async read / write functions for SOCKS5 protocol.

Check out crate socks5-server for a complete SOCKS5 server implementation.
Example
use socks5_proto::{
Address, HandshakeMethod, HandshakeRequest, HandshakeResponse, Reply, Request, Response,
};
use std::{
io,
net::{Ipv4Addr, SocketAddr},
};
use tokio::net::TcpListener;
#[tokio::main]
async fn main() -> io::Result<()> {
let listener = TcpListener::bind("127.0.0.1:5000").await?;
let (mut stream, _) = listener.accept().await?;
let hs_req = HandshakeRequest::read_from(&mut stream).await?;
if hs_req.methods.contains(&HandshakeMethod::None) {
let hs_resp = HandshakeResponse::new(HandshakeMethod::None);
hs_resp.write_to(&mut stream).await?;
} else {
let hs_resp = HandshakeResponse::new(HandshakeMethod::Unacceptable);
hs_resp.write_to(&mut stream).await?;
}
let req = match Request::read_from(&mut stream).await {
Ok(req) => req,
Err(err) => {
let resp = Response::new(
Reply::GeneralFailure,
Address::SocketAddress(SocketAddr::from((Ipv4Addr::UNSPECIFIED, 0))),
);
resp.write_to(&mut stream).await?;
return Err(err);
}
};
match req.command {
_ => {} }
Ok(())
}
License
GNU General Public License v3.0