Crate dlzht_socks5

Crate dlzht_socks5 

Source
Expand description

§Run server without any authorization

use dlzht_socks5::server::SocksServerBuilder;

#[tokio::main]
async fn main() {
    let server = SocksServerBuilder::new()
        .allow_auth_skip(true)
        .build().unwrap();
    let _ = server.start().await;
}

Invoking allow_auth_skip(true), server will support auth method NO AUTHENTICATION REQUIRED, which means auth phase can be skipped.

§Run server with password authorization

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;
}

Invoking allow_auth_skip(true), server will support auth method USERNAME/PASSWORD, allow_auth_pass will auto be set true(we can set false back to disable password auth).

If we hava multiple username/password, then we can invoke credential(...) repeatedly, or invoke credentials(...) for convenience.

§Custom validate username/password

Will support soon

§Run client without any authorization

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

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();
}

Modules§

client
client module include SocksClientBuilder and SocksClient
errors
error module include all errors occur handling SOCKS5
server
server module include SocksServerBuilder and SocksServer

Enums§

SocksAddr
three type of address SOCKS5 support

Traits§

ToSocksAddress
convert trait from SocketAddr to SocksAddr