@@ -168,6 +168,7 @@ async def _send_ping_packet(self, server, is_ping=True):
168168 dynamic_data = f"P{ int (time .time () % 60 )} R{ random .randint (100 , 999 )} " .encode ()
169169
170170 try :
171+ self .balancer .report_send (f"{ server ['resolver' ]} :{ server ['domain' ]} " )
171172 query_packets = await self .dns_packet_parser .build_request_dns_query (
172173 domain = server ["domain" ],
173174 session_id = self .session_id ,
@@ -190,7 +191,7 @@ async def _send_ping_packet(self, server, is_ping=True):
190191 self .logger .debug (f"Failed to send PING: { e } " )
191192
192193 async def _process_received_packet (
193- self , response_bytes : bytes
194+ self , response_bytes : bytes , addr = None
194195 ) -> Tuple [Optional [dict ], bytes ]:
195196 """
196197 Parse raw DNS response, extract VPN header, and return packet type alongside assembled data.
@@ -200,6 +201,17 @@ async def _process_received_packet(
200201 return None , b""
201202
202203 parsed = await self .dns_packet_parser .parse_dns_packet (response_bytes )
204+ if addr and parsed and parsed .get ("questions" ):
205+ try :
206+ qname = parsed ["questions" ][0 ].get ("qName" , "" ).lower ()
207+ base_domain = next (
208+ (d for d in self .domains if qname .endswith (d .lower ())), None
209+ )
210+ if base_domain :
211+ self .balancer .report_success (f"{ addr [0 ]} :{ base_domain } " )
212+ except Exception as _ :
213+ pass
214+
203215 if not parsed or not parsed .get ("answers" ):
204216 self .logger .debug (
205217 "<yellow>[PARSER]</yellow> DNS response contains no answers."
@@ -876,16 +888,16 @@ async def _rx_worker(self):
876888 self .logger .debug (
877889 f"<magenta>[RX]</magenta> Data from tunnel socket: { len (data )} bytes"
878890 )
879- self .loop .create_task (self ._process_and_route_incoming (data ))
891+ self .loop .create_task (self ._process_and_route_incoming (data , addr ))
880892
881893 except asyncio .TimeoutError :
882894 continue
883895 except Exception as e :
884896 self .logger .debug (f"RX Worker error: { e } " )
885897
886- async def _process_and_route_incoming (self , data ):
898+ async def _process_and_route_incoming (self , data , addr ):
887899 """Helper to process incoming data asynchronously."""
888- parsed_header , returned_data = await self ._process_received_packet (data )
900+ parsed_header , returned_data = await self ._process_received_packet (data , addr )
889901 if parsed_header :
890902 await self ._handle_server_response (parsed_header , returned_data )
891903
@@ -1019,6 +1031,7 @@ async def _send_single_packet(self, item):
10191031 return
10201032
10211033 for conn in target_conns :
1034+ self .balancer .report_send (f"{ conn ['resolver' ]} :{ conn ['domain' ]} " )
10221035 query_packets = await self .dns_packet_parser .build_request_dns_query (
10231036 domain = conn ["domain" ],
10241037 session_id = self .session_id ,
0 commit comments