[−][src]Crate async_proxy
async-proxy
The crate async-proxy
provides a fast and flexible,
as well as asyncronous implementation of proxy clients
and proxy-related utilities.
Example
use async_proxy::clients::socks4::no_ident::{ Socks4NoIdent, ConnParams }; use async_proxy::general::ConnectionTimeouts; use async_proxy::proxy::ProxyStream; use tokio::net::TcpStream; use std::net::{ SocketAddr, SocketAddrV4, IpAddr, Ipv4Addr }; use std::time::Duration; #[tokio::main] async fn main() { // The address of the proxy server that // will be used to connect through. // (We used a random proxy from `https://hidemy.name/en/proxy-list/`) const PROXY_IPADDR: Ipv4Addr = Ipv4Addr::new(104, 248, 63, 15); // The port of the proxy server const PROXY_PORT: u16 = 30_588; // The full `SocketAddr` proxy server address representation let proxy_addr: SocketAddr = SocketAddr::new(IpAddr::V4(PROXY_IPADDR), PROXY_PORT); // Setting up timeouts let timeouts = ConnectionTimeouts::new( // Connecting timeout Duration::from_secs(8), // Write timeout Duration::from_secs(8), // Read timeout Duration::from_secs(8) ); // The address of the destination service // that we will be connecting to through proxy. // (We used a tcp echo server from `http://tcpbin.org/`) const DEST_IPADDR: Ipv4Addr = Ipv4Addr::new(52, 20, 16, 20); // The port of the destination service let DEST_PORT: u16 = 30_000; // The full `SocketAddrV4` destination service address representation let dest_addr: SocketAddrV4 = SocketAddrV4::new(DEST_IPADDR, DEST_PORT); // Creating required connection parameters // for Socks4 proxy client let connection_params = ConnParams::new(dest_addr, timeouts); // `Socks4NoIdent` performs operations on // an existant stream, so we need to connect // to the proxy server by ourselves let stream = TcpStream::connect(proxy_addr) .await .expect("Unable to connect to the proxy server"); // Connecting to the service through proxy. // If connection succeed, `Socks4NoIdent::connect` returns // both a readable and writeable stream that you will // be working on as on a normal tcp connection stream let stream = match Socks4NoIdent::connect(stream, connection_params).await { Ok(stream) => stream /* Successfully connected to the service*/, Err(error) => { /* Connection error */ // -- snip -- // } }; // -- using stream -- }
Modules
clients | Module responsible for client implementations of known and most-used proxifications protocols, such as Socks4/5, HTTP(s) proxies |
general | Module contains types and definitions that are widely and generally used over the library |
proxy | Module responsible for functionality related to proxy clients interfaces (eg. common definitions and traits) |