
    kj                        d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlZd dlmZ d dlmZ d dlmZ d d	lmZ  ej(                  e      Z G d
 d      Z G d de      Z G d de      Z G d de      Zy)    )annotationsN)Sequence)cache)Protocol)ctx)dns)Error)
mode_specsc                  f    e Zd Zd Zd Zed	d       Zed
d       ZddZe	dd       Z
	 	 	 	 ddZy)DnsResolverc                r    |j                  dt        dd       |j                  dt        t           g d       y )Ndns_use_hosts_fileTzFUse the hosts file for DNS lookups in regular DNS mode/wireguard mode.dns_name_serverszlName servers to use for lookups in regular DNS mode/wireguard mode. Default: operating system's name servers)
add_optionboolr   str)selfloaders     f/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/mitmproxy/addons/dns_resolver.pyloadzDnsResolver.load   s<     T		
 	SMz		
    c                ~    d|v sd|v r5| j                   j                          | j                  j                          y y )Nr   r   )resolvercache_clearname_servers)r   updateds     r   	configurezDnsResolver.configure$   s:    7*.@G.KMM%%'))+ /Lr   c                    	 t         j                  j                  xs t        j                  j                         S # t        $ r%}t        j                  d| d       g cY d}~S d}~ww xY w)z
        Returns the operating system's name servers unless custom name servers are set.
        On error, an empty list is returned.
        z"Failed to get system dns servers: z6
The dns_name_servers option needs to be set manually.N)	r   optionsr   mitmproxy_rsr   get_system_dns_serversRuntimeErrorloggerwarning)r   es     r   r   zDnsResolver.name_servers)   sh    
	,, =##::<  	NN4QC 8H I I	s   9< 	A*A%A*%A*c                    | j                         x}r9t        j                  j                  |t        j
                  j                        S t        j
                  j                  r
t               S t               )z
        Returns:
            The DNS resolver to use.
        Raises:
            MissingNameServers, if name servers are unknown and `dns_use_hosts_file` is disabled.
        )r   use_hosts_file)	r   r    r   r   r   r   r   GetaddrinfoFallbackResolverMissingNameServers)r   nss     r   r   zDnsResolver.resolver;   si     ""$$2$##//"{{== 0   [[++ /00$&&r   c                &  K   | j                  |      rZ|j                  j                  xr |j                  j                  t        j
                  j                  k(  xr |j                  j                  xr |j                  j                  j                  t        j                  j                  k(  xrT |j                  j                  j                  t        j                  j                  t        j                  j                  fv }|r*	 | j                  |j                         d {   |_        y | j)                         x}r|d   df|j*                  _        y t%        d      |_        y y 7 E# t"        $ r t%        d      |_        Y y w xY ww)Nz)Cannot resolve, dns_name_servers unknown.r   5   )_should_resolverequestqueryop_coder   op_codesQUERYquestionclass_classesINtypetypesAAAAAresolveresponser)   r	   errorr   server_connaddress)r   flowall_ip_lookupsr   s       r   dns_requestzDnsResolver.dns_requestP   s>    %"" PLL((CLL,>,>>PLL))P LL))00CKKNNBP LL))..399;;		2OO  T*.,,t||*D$DDM "&!2!2!444 -9OR+@  ("#NO
% & %E) T!&'R!SDJTs<   D	FE2 *E0+	E2 4<F0E2 2FFFFc                L   t        | j                  j                  t        j                        xsI t        | j                  j                  t        j
                        xr | j                  j                  dk(  xr* | j                  xr | j                   xr | j                   S )N)z	10.0.0.53r,   )
isinstanceclient_conn
proxy_moder
   DnsModeWireGuardModer>   r?   liver<   r=   )r@   s    r   r-   zDnsResolver._should_resolvee   s     4++66
8J8JK t//::J<T<TU F((004EE		 			 MM!	 JJ	
r   c                  K   |j                   }|sJ 	 |j                  t        j                  j                  k(  r2| j                         j                  |j                         d {   }n1| j                         j                  |j                         d {   }|j%                  |D cg c]o  }t        j&                  |j                  |j                  |j(                  t        j&                  j*                  t-        j.                  |      j0                        q c}      S 7 7 # t        j                  $ r}|j                  d   xt        j                  k(  r/ |j                  t        j                  j                        cY d }~S t        j                   k(  rg }n/	 |j                  t        j                  j"                        cY d }~S Y d }~;d }~ww xY wc c}w w)Nr   )namer7   r4   ttldata)r3   r7   r   r8   r9   r   lookup_ipv4rK   lookup_ipv6socketgaierrorargs
EAI_NONAMEfailresponse_codesNXDOMAIN
EAI_NODATASERVFAILsucceedResourceRecordr4   DEFAULT_TTL	ipaddress
ip_addresspacked)r   messageqip_addrsr%   ips         r   r;   zDnsResolver.resolvet   sd     q	Evv$!%!<!<QVV!DD!%!<!<QVV!DD  #	  ""88**66"--b188	
 	
 ED 	E&&)&V&&"<<(:(:(C(CDD&&!H"<<(:(:(C(CDD 	E	sy   G&AD, 'D((1D, D*D, G&-A4G!!G&(D, *D, ,G?A
G	G
G&>GGG&GG&N)return	list[str])rc   Resolver)r@   dns.DNSFlowrc   None)r@   rf   rc   r   )r_   dns.DNSMessagerc   rh   )__name__
__module____qualname__r   r   r   r   r   rB   staticmethodr-   r;    r   r   r   r      se    
,
  " ' '(P* 
 


 

r   r   c                  $    e Zd ZddZddZddZy)re   c                   K   y wNrm   r   domains     r   	lookup_ipzResolver.lookup_ip   	        c                   K   y wrp   rm   rq   s     r   rN   zResolver.lookup_ipv4   rt   ru   c                   K   y wrp   rm   rq   s     r   rO   zResolver.lookup_ipv6   rt   ru   Nrr   r   rc   rd   )ri   rj   rk   rs   rN   rO   rm   r   r   re   re      s    r   re   c                  ,    e Zd ZddZddZddZddZy)r(   c                ^   K   | j                  |t        j                         d {   S 7 wrp   )_lookuprP   	AF_UNSPECrq   s     r   rs   z%GetaddrinfoFallbackResolver.lookup_ip   s#     \\&&*:*:;;;;   $-+-c                ^   K   | j                  |t        j                         d {   S 7 wrp   )r{   rP   AF_INETrq   s     r   rN   z'GetaddrinfoFallbackResolver.lookup_ipv4   s!     \\&&..9999r}   c                ^   K   | j                  |t        j                         d {   S 7 wrp   )r{   rP   AF_INET6rq   s     r   rO   z'GetaddrinfoFallbackResolver.lookup_ipv6   s!     \\&&//::::r}   c                   K   t        j                         j                  |d |t        j                         d {   }|D cg c]
  }|d   d    c}S 7 c c}w w)N)hostportfamilyr7      r   )asyncioget_running_loopgetaddrinforP   SOCK_STREAM)r   rr   r   	addrinfosaddrinfos        r   r{   z#GetaddrinfoFallbackResolver._lookup   sa     !224@@##	 A 
 
	 0998A99
 :s!   9AAAAAANrx   )rr   r   r   zsocket.AddressFamilyrc   rd   )ri   rj   rk   rs   rN   rO   r{   rm   r   r   r(   r(      s    <:;:r   r(   c                      e Zd Zy)r)   N)ri   rj   rk   rm   r   r   r)   r)      s    r   r)   )
__future__r   r   r\   loggingrP   collections.abcr   	functoolsr   typingr   r    	mitmproxyr   r   mitmproxy.flowr	   mitmproxy.proxyr
   	getLoggerri   r#   r   re   r(   r"   r)   rm   r   r   <module>r      so    "     $        &			8	$
 
Dx :( :(	 	r   