dns/
dns.rs

1use tokio::io::{AsyncReadExt, AsyncWriteExt};
2use uni_stream::{
3    addr::{get_ip_addrs, set_custom_dns_server, ToSocketAddrs},
4    stream::{StreamProvider, TcpStreamProvider},
5};
6
7/// Udp connections are used in the same way as tcp connections using a customized dns server
8async fn custom_dns_tcp_stream_read<A: ToSocketAddrs + Send>(addr: A) {
9    // start tcp connect with custom dns resolver
10    let mut stream = TcpStreamProvider::connect(addr).await.unwrap();
11    stream
12        .write_all(b"GET /get HTTP/1.1\r\nHost: httpbin.org\r\nAccept: */*\r\n\r\n")
13        .await
14        .unwrap();
15    let mut buf = [0; 1024];
16    let n = stream.read(&mut buf).await.unwrap();
17    println!("response:{}", String::from_utf8_lossy(&buf[..n]));
18}
19
20/// Get SocketAddr using a custom dns server
21async fn custom_dns_resolver(host: &str) {
22    println!("{host}:{:?}", get_ip_addrs(host).await.unwrap());
23}
24
25#[tokio::main]
26async fn main() {
27    // use google and alibaba dns server
28    set_custom_dns_server(&["8.8.8.8".parse().unwrap(), "233.5.5.5".parse().unwrap()]).unwrap();
29    // get http response
30    custom_dns_tcp_stream_read("httpbin.org:80").await;
31    // get bilibili.com addr
32    custom_dns_resolver("bilibili.com").await;
33}