Skip to content

Commit 15066af

Browse files
committed
args
1 parent 7a54f8e commit 15066af

File tree

1 file changed

+27
-10
lines changed

1 file changed

+27
-10
lines changed

src/main.rs

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,50 @@ const LISTEN: &str = "0.0.0.0:53";
66
const SERVER: &str = "1.1.1.1:53";
77

88
async fn udp_serv() -> std::io::Result<()> {
9-
let listener = tokio::net::UdpSocket::bind(LISTEN).await;
9+
let listen = if let Some(listen) = std::env::args().nth(1) {
10+
listen
11+
} else {
12+
LISTEN.to_string()
13+
};
14+
let log = if let Some(_) = std::env::args().nth(3) {
15+
true
16+
} else {
17+
false
18+
};
19+
let listener = tokio::net::UdpSocket::bind(listen).await;
1020
if let Err(e) = listener {
1121
println!("无法启用监听服务: {}", e);
1222
return Err(e);
1323
}
1424
let listener: UdpSocket = listener.ok().unwrap();
1525
let listener = std::sync::Arc::new(listener);
26+
println!("DNS代理服务已启动");
1627

28+
let mut query = [0u8; 1024]; // DNS query request data
1729
loop {
1830
let listener = listener.clone();
19-
let mut query = [0u8; 10240*2]; // DNS query request data
2031
let recv_result = listener.recv_from(&mut query[2..]).await;
2132
if let Err(_) = recv_result {
2233
continue;
2334
}
2435
let (received, client) = recv_result.ok().unwrap();
25-
println!("DNS查询...");
26-
println!("data: {:?}", &query[..received + 2]);
36+
if log {
37+
println!("DNS查询...");
38+
println!("data: {:?}", &query[..received + 2]);
39+
}
2740

2841
tokio::spawn(async move {
2942
// TCP data body length
3043
query[0] = (received / 0xff) as u8;
3144
query[1] = (received % 0xff) as u8;
3245

3346
// Connect server
34-
let tcp = tokio::net::TcpStream::connect(SERVER).await;
47+
let server = if let Some(server) = std::env::args().nth(2) {
48+
server
49+
} else {
50+
SERVER.to_string()
51+
};
52+
let tcp = tokio::net::TcpStream::connect(server).await;
3553
if let Err(e) = tcp {
3654
println!("无法连接服务器{}:{}", SERVER, e);
3755
return;
@@ -46,11 +64,10 @@ async fn udp_serv() -> std::io::Result<()> {
4664
}
4765

4866
if let Ok(le) = tcp.read(&mut query).await {
49-
listener
50-
.send_to(&query[2..le], client)
51-
.await
52-
.unwrap();
53-
println!("resp: {:?}", &query[..le]);
67+
listener.send_to(&query[2..le], client).await.unwrap();
68+
if log {
69+
println!("resp: {:?}", &query[..le]);
70+
}
5471
}
5572
});
5673
}

0 commit comments

Comments
 (0)