o
    iA                     @   s(  d dl Z d dlZe jdkrd dlZd dlmZ d dlZd dlm	Z	 d dl
ZzeZW n ey4   eZY nw G dd de	ZG dd dZejaejdrfd dlZd dlZd dlZejaG d	d
 d
ejZnG dd
 d
Zdd ZG dd dZG dd deZdeddfddZdefddZdS dS )    Nwin32)IntEnumc                   @   s   e Zd ZdZdZdZdS )ConfigMethod         N)__name__
__module____qualname__RegistryWMIWin32 r   r   D/home/app/Keep/.python/lib/python3.10/site-packages/dns/win32util.pyr      s    r   c                   @      e Zd Zdd ZdS )DnsInfoc                 C   s   d | _ g | _g | _d S N)domainnameserverssearchselfr   r   r   __init__   s   
zDnsInfo.__init__N)r   r	   r
   r   r   r   r   r   r      s    r   wmic                       s,   e Zd Z fddZdd Zdd Z  ZS )
_WMIGetterc                    s   t    t | _d S r   )superr   r   infor   	__class__r   r   r   -   s   
z_WMIGetter.__init__c                 C   s   t   z?t }| D ](}|jr5|jr5t|j| j_	|j
r&t|j
| j_|jr3dd |jD | j_ nqW t   d S W t   d S t   w )Nc                 S   s   g | ]}t |qS r   )_config_domain).0xr   r   r   
<listcomp>;   s    z"_WMIGetter.run.<locals>.<listcomp>)	pythoncomZCoInitializer   r   Z!Win32_NetworkAdapterConfigurationZ	IPEnabledZDNSServerSearchOrderlistr   r   Z	DNSDomainr   r   ZDNSDomainSuffixSearchOrderr   ZCoUninitialize)r   systemZ	interfacer   r   r   run1   s$   
z_WMIGetter.runc                 C   s   |    |   | jS r   )startjoinr   r   r   r   r   getC   s   z_WMIGetter.get)r   r	   r
   r   r&   r)   __classcell__r   r   r   r   r   +   s    r   c                   @      e Zd ZdS )r   Nr   r	   r
   r   r   r   r   r   L       c                 C   s"   |  dr| dd  } tj| S )N.r   )
startswithdnsname	from_text)r   r   r   r   r   O   s   
r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )_RegistryGetterc                 C   s   t  | _d S r   )r   r   r   r   r   r   r   X   s   z_RegistryGetter.__init__c                 C   s   | dd S )N, )replacesplit)r   textr   r   r   _split[   s   z_RegistryGetter._splitc                 C   s.   |  |D ]}|| jjvr| jj| qd S r   )r9   r   r   append)r   r   nsr   r   r   _config_nameserversc   s
   z#_RegistryGetter._config_nameserversc                 C   s6   |  |D ]}t|}|| jjvr| jj| qd S r   )r9   r   r   r   r:   )r   r   sr   r   r   _config_searchh   s   z_RegistryGetter._config_searchc                 C   sb  z
t |d\}}W n ty   d }Y nw |r| | |s!|r=zt |d\}}|r2t|| j_W nB ty<   Y n:w z
t |d\}}W n tyR   d }Y nw |rv| | zt |d\}}|rkt|| j_W n	 tyu   Y nw z
t |d\}}W n ty   d }Y nw |d u rz
t |d\}}W n ty   d }Y nw |r| | d S d S )NZ
NameServerDomainZDhcpNameServerZ
DhcpDomainZ
SearchListZDhcpSearchList)winregQueryValueExWindowsErrorr<   r   r   r   r>   )r   keyZalways_try_domainZservers_domr   r   r   r   _config_fromkeyn   sZ   

z_RegistryGetter._config_fromkeyc                 C   s   zMt |d| d}z=t |d\}}|t jkrtt |d| }zt |d\}}|t jkr4t|d@  W |  W |  W S |  w |  w  tyW   Y dS w )NzPSYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\z\ConnectionZPnpInstanceIDzSYSTEM\CurrentControlSet\Enum\ZConfigFlagsr   F)r@   OpenKeyrA   REG_SZ
ValueErrorZ	REG_DWORDClose	Exception)r   lmguidZconnection_keyZpnp_idttypeZ
device_keyflagsr   r   r   _is_nic_enabled   s8   



	


z_RegistryGetter._is_nic_enabledc                 C   s   t dt j}zqt |d}z| |d W |  n|  w t |d}zEd}	 z1t ||}|d7 }t ||}z| ||sIW |  W q)| |d W |  n|  w W n	 tyd   Y nw q*W |  n|  w W |  | j	S |  w )z9Extract resolver configuration from the Windows registry.Nz2SYSTEM\CurrentControlSet\Services\Tcpip\ParametersTz=SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfacesr   r   F)
r@   ZConnectRegistryHKEY_LOCAL_MACHINErG   rF   rJ   EnumKeyrP   OSErrorr   )r   rL   Z
tcp_paramsZ
interfacesirM   rC   r   r   r   r)      sD   
z_RegistryGetter.getN)
r   r	   r
   r   r9   r<   r>   rF   rP   r)   r   r   r   r   r3   W   s    '4r3   c                   @   r   )_Win32Getterc           $         s  t d}d}d}d}d}d}d}G dd dt j G d	d
 d
t j}G  fdddt j}	G dd dt j}
dtjfdtjfdt |
fd|	fg|
_G dd dt j}G dd dt j}G dd dt j}G dd dt j}G dd dt j}G dd dt j}G dd  d t j}G d!d" d"t j}G d#d$ d$t j}G d%d& d&t j}dtjfd'tjfdt |fd(t jfd)t |	fd*t |	fd+t |	fd,t |
fd-tj	fd.tj	fd/tj	fd0t j
d1 fd2tjfd3tjfd4tjfd5tjfd6t jfg|_d7d8 }d9d: }t d;}	 t |j}|||d=|t |}||krn|d>kr,td?|  d=S qt |t |}|}|r|jj}|d@krK|jj}q9|jj|krX|jj}q9|jj}|rgtj|| j_|jj}|r|jjj}|jj } d=}!| |kr||j}!n| |krt |t |}||j}!|!r|!| jj!vr| jj!"|! |jj}|sn|jj}|s<t# }"|"$ }#|#j%| j_%| jS )Az)Get the attributes using the Windows API.zIphlpapi.dllr      r         c                   @   $   e Zd Zdejfdejd fgZdS )z$_Win32Getter.get.<locals>.SOCKADDRV4	sa_familysa_data   Nr   r	   r
   wintypesZUSHORTctypesc_ubyte_fields_r   r   r   r   
SOCKADDRV4       rb   c                   @   rY   )z$_Win32Getter.get.<locals>.SOCKADDRV6rZ   r[      Nr]   r   r   r   r   
SOCKADDRV6  rc   re   c                       s$   e Zd Zde fdejfgZdS )z(_Win32Getter.get.<locals>.SOCKET_ADDRESS
lpSockaddrZiSockaddrLengthN)r   r	   r
   r_   POINTERr^   INTra   r   rb   r   r   SOCKET_ADDRESS  s    rj   c                   @   r+   )z7_Win32Getter.get.<locals>.IP_ADAPTER_DNS_SERVER_ADDRESSNr,   r   r   r   r   IP_ADAPTER_DNS_SERVER_ADDRESS  r-   rk   ZLengthReservedNextAddressc                   @   s   e Zd ZdejfgZdS )z!_Win32Getter.get.<locals>.IF_LUIDValueN)r   r	   r
   r_   Zc_ulonglongra   r   r   r   r   IF_LUID  s    rp   c                   @   s   e Zd Zdejd fgZdS )z-_Win32Getter.get.<locals>.NET_IF_NETWORK_GUIDro   rV   N)r   r	   r
   r_   r`   ra   r   r   r   r   NET_IF_NETWORK_GUID  s    rq   c                   @   r+   )z._Win32Getter.get.<locals>.IP_ADAPTER_PREFIX_XPNr,   r   r   r   r   IP_ADAPTER_PREFIX_XP!  r-   rr   c                   @   r+   )z7_Win32Getter.get.<locals>.IP_ADAPTER_GATEWAY_ADDRESS_LHNr,   r   r   r   r   IP_ADAPTER_GATEWAY_ADDRESS_LH$  r-   rs   c                   @   s*   e Zd Zdejd fdeejfgZdS )z/_Win32Getter.get.<locals>.IP_ADAPTER_DNS_SUFFIXString   rm   N)r   r	   r
   r_   Zc_wcharrg   Zc_void_pra   r   r   r   r   IP_ADAPTER_DNS_SUFFIX'  s    rv   c                   @   r+   )z7_Win32Getter.get.<locals>.IP_ADAPTER_UNICAST_ADDRESS_LHNr,   r   r   r   r   IP_ADAPTER_UNICAST_ADDRESS_LH-  r-   rw   c                   @   r+   )z9_Win32Getter.get.<locals>.IP_ADAPTER_MULTICAST_ADDRESS_XPNr,   r   r   r   r   IP_ADAPTER_MULTICAST_ADDRESS_XP0  r-   rx   c                   @   r+   )z7_Win32Getter.get.<locals>.IP_ADAPTER_ANYCAST_ADDRESS_XPNr,   r   r   r   r   IP_ADAPTER_ANYCAST_ADDRESS_XP3  r-   ry   c                   @   r+   )z:_Win32Getter.get.<locals>.IP_ADAPTER_DNS_SERVER_ADDRESS_XPNr,   r   r   r   r    IP_ADAPTER_DNS_SERVER_ADDRESS_XP6  r-   rz   c                   @   r+   )z._Win32Getter.get.<locals>.IP_ADAPTER_ADDRESSESNr,   r   r   r   r   IP_ADAPTER_ADDRESSES9  r-   r{   ZIfIndexZAdapterNameZFirstUnicastAddressZFirstAnycastAddressZFirstMulticastAddressFirstDnsServerAddress	DnsSuffixDescriptionZFriendlyNameZPhysicalAddress   ZPhysicalAddressLengthFlagsZMtuIfType
OperStatusc                 S   s   d tt| jdd S )Nr.   r      )r(   mapstrr[   )Zsockaddr_inr   r   r   format_ipv4T  s   z%_Win32Getter.get.<locals>.format_ipv4c                    s.    fddt dddD }ddd |D S )	Nc                    s0   g | ]} j |d   d>  j |d  d  B qS )r   r   r   )r[   )r    rT   sockaddr_in6r   r   r"   a  s    "z9_Win32Getter.get.<locals>.format_ipv6.<locals>.<listcomp>r   rV   r   :c                 s   s    | ]}|d V  qdS )Z04xNr   )r    partr   r   r   	<genexpr>e  s    z8_Win32Getter.get.<locals>.format_ipv6.<locals>.<genexpr>)ranger(   )r   partsr   r   r   format_ipv6W  s   


z%_Win32Getter.get.<locals>.format_ipv6i:  TNo   z&Error retrieving adapter information: r   )&r_   ZWinDLLZ	Structurer^   ZULONGZDWORDrg   ra   c_char_pZLPWSTRr`   Zc_uintZc_ulongZcreate_string_buffervalueZGetAdaptersAddressesZbyrefprintcastcontentsr   rm   r   r}   r0   r1   r2   r   r   r|   rn   rf   rZ   r   r:   r3   r)   r   )$r   ZIPHLPAPI	AF_UNSPECZERROR_SUCCESSZGAA_FLAG_INCLUDE_PREFIXAF_INETAF_INET6ZIF_TYPE_SOFTWARE_LOOPBACKre   rj   rk   rp   rq   rr   rs   rv   rw   rx   ry   rz   r{   r   r   buffer_sizebufferZret_valZadapter_addressesZcurrent_adapterZoper_statusZ
dns_suffixZcurrent_dns_serversockaddrZsockaddr_familyipZregistry_getterr   r   ri   r   r)      s   









'
z_Win32Getter.getN)r   r	   r
   r)   r   r   r   r   rU      s    rU   methodreturnc                 C   s   | a d S r   )_config_method)r   r   r   r   set_config_method  s   r   c                  C   s>   t tjkrt } |  S t tjkrt } |  S t } |  S )zExtract resolver configuration.)r   r   r   rU   r   r   r3   r)   )getterr   r   r   get_dns_info  s   

r   ) sysZdns._featuresr0   platformr_   Zctypes.wintypesr^   r@   enumr   Zdns.namerB   rD   	NameErrorrK   r   r   r   r   Z	_featuresZhave	threadingr#   r   r   Threadr   r   r3   rU   r   r   r   r   r   r   <module>   sD    
!  =   