@@ -6,32 +6,50 @@ const LISTEN: &str = "0.0.0.0:53";
66const SERVER : & str = "1.1.1.1:53" ;
77
88async 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