35 lines
1002 B
Rust
35 lines
1002 B
Rust
//! Test the tor proxy capabilities
|
|
//!
|
|
//! This example requires a running tor proxy.
|
|
|
|
use tokio::{
|
|
io::{AsyncReadExt, AsyncWriteExt},
|
|
runtime::Runtime,
|
|
};
|
|
use tokio_socks::{tcp::Socks5Stream, Error};
|
|
|
|
const PROXY_ADDR: &str = "127.0.0.1:9050";
|
|
const ONION_ADDR: &str = "3g2upl4pq6kufc4m.onion:80"; // DuckDuckGo
|
|
|
|
async fn connect() -> Result<(), Error> {
|
|
let target = Socks5Stream::tor_resolve(PROXY_ADDR, "duckduckgo.com:0").await?;
|
|
eprintln!("duckduckgo.com = {:?}", target);
|
|
let target = Socks5Stream::tor_resolve_ptr(PROXY_ADDR, "176.34.155.23:0").await?;
|
|
eprintln!("176.34.155.23 = {:?}", target);
|
|
|
|
let mut conn = Socks5Stream::connect(PROXY_ADDR, ONION_ADDR).await?;
|
|
conn.write_all(b"GET /\n\n").await?;
|
|
|
|
let mut buf = Vec::new();
|
|
let n = conn.read_to_end(&mut buf).await?;
|
|
|
|
println!("{} bytes read\n\n{}", n, String::from_utf8_lossy(&buf));
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn main() {
|
|
let mut rt = Runtime::new().unwrap();
|
|
rt.block_on(connect()).unwrap();
|
|
}
|