This library is an implement of SOCKS5, [RFC1928](https://www.rfc-editor.org/rfc/rfc1928). So far, auth method of `NO AUTHENTICATION REQUIRED` and `USERNAME/PASSWORD` is supported, command `CONNECT` is supported. ### Examples #### Run server without any authorization ```rust use dlzht_socks5::server::SocksServerBuilder; #[tokio::main] async fn main() { let server = SocksServerBuilder::new() .allow_auth_skip(true) .build().unwrap(); let _ = server.start().await; } ``` #### Run server with password authorization ```rust use dlzht_socks5::server::SocksServerBuilder; #[tokio::main] async fn main() { let server = SocksServerBuilder::new() .credential(b"username", b"password") .build().unwrap(); let _ = server.start().await; } ``` #### Custom validate username/password Will support soon #### Run client without any authorization ```rust use dlzht_socks5::client::SocksClientBuilder; use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; #[tokio::main] async fn main() { let address = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 8080)); let mut client = SocksClientBuilder::new() .server_address(address) .allow_auth_skip(true) .build() .unwrap(); let mut stream = client .connect(("127.0.0.1".to_string(), 9000)) .await .unwrap(); } ``` #### Run client with password authorization ```rust use dlzht_socks5::client::SocksClientBuilder; use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; #[tokio::main] async fn main() { let address = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 8080)); let mut client = SocksClientBuilder::new() .server_address(address) .credential(b"username", b"password") .build() .unwrap(); let mut stream = client .connect(("127.0.0.1".to_string(), 9000)) .await .unwrap(); } ```