o
    Þý°jŸA  ã                   @   s(  d dl Z d dlZe jdkr’d 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   ú€/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/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>)Ú	pythoncomÚCoInitializer   r   Ú!Win32_NetworkAdapterConfigurationÚ	IPEnabledÚDNSServerSearchOrderÚlistr   r   Ú	DNSDomainr   r   ÚDNSDomainSuffixSearchOrderr   ÚCoUninitialize)r   ÚsystemÚ	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.   r1   Ú__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   )rA   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   )rA   r   r   r   rB   )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 r¦z
t  |d¡\}}W n ty¥   d }Y nw |r¯|  |¡ d S d S )NÚ
NameServerÚDomainÚDhcpNameServerÚ
DhcpDomainÚ
SearchListÚDhcpSearchList)ÚwinregÚQueryValueExÚWindowsErrorrD   r   r   r   rF   )r   ÚkeyÚalways_try_domainÚ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\ConnectionÚPnpInstanceIDzSYSTEM\CurrentControlSet\Enum\ÚConfigFlagsr   F)rM   ÚOpenKeyrN   ÚREG_SZÚ
ValueErrorÚ	REG_DWORDÚCloseÚ	Exception)r   ÚlmÚguidÚconnection_keyÚpnp_idÚttypeÚ
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)
rM   ÚConnectRegistryÚHKEY_LOCAL_MACHINErX   rU   r\   ÚEnumKeyre   ÚOSErrorr   )r   r^   Ú
tcp_paramsÚ
interfacesÚir_   rP   r   r   r   r1   É   sD   ÿþþÿõ
ÿz_RegistryGetter.getN)
r   r	   r
   r   rA   rD   rF   rU   re   r1   r   r   r   r   r;   W   s    '4r;   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�r—t  |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
   ÚwintypesÚUSHORTÚctypesÚc_ubyteÚ_fields_r   r   r   r   Ú
SOCKADDRV4ÿ   ó    þr{   c                   @   rq   )z$_Win32Getter.get.<locals>.SOCKADDRV6rr   rs   é   Nru   r   r   r   r   Ú
SOCKADDRV6  r|   r~   c                       s$   e Zd Zde ” ¡fdejfgZdS )z(_Win32Getter.get.<locals>.SOCKET_ADDRESSÚ
lpSockaddrÚiSockaddrLengthN)r   r	   r
   rx   ÚPOINTERrv   ÚINTrz   r   ©r{   r   r   ÚSOCKET_ADDRESS  s    þr„   c                   @   r3   )z7_Win32Getter.get.<locals>.IP_ADAPTER_DNS_SERVER_ADDRESSNr4   r   r   r   r   ÚIP_ADAPTER_DNS_SERVER_ADDRESS  r5   r…   Ú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
   rx   Úc_ulonglongrz   r   r   r   r   ÚIF_LUID  s    rŒ   c                   @   s   e Zd Zdejd fgZdS )z-_Win32Getter.get.<locals>.NET_IF_NETWORK_GUIDrŠ   rn   N)r   r	   r
   rx   ry   rz   r   r   r   r   ÚNET_IF_NETWORK_GUID  s    r�   c                   @   r3   )z._Win32Getter.get.<locals>.IP_ADAPTER_PREFIX_XPNr4   r   r   r   r   ÚIP_ADAPTER_PREFIX_XP!  r5   rŽ   c                   @   r3   )z7_Win32Getter.get.<locals>.IP_ADAPTER_GATEWAY_ADDRESS_LHNr4   r   r   r   r   ÚIP_ADAPTER_GATEWAY_ADDRESS_LH$  r5   r�   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é   rˆ   N)r   r	   r
   rx   Úc_wcharr�   Úc_void_prz   r   r   r   r   ÚIP_ADAPTER_DNS_SUFFIX'  s    þr”   c                   @   r3   )z7_Win32Getter.get.<locals>.IP_ADAPTER_UNICAST_ADDRESS_LHNr4   r   r   r   r   ÚIP_ADAPTER_UNICAST_ADDRESS_LH-  r5   r•   c                   @   r3   )z9_Win32Getter.get.<locals>.IP_ADAPTER_MULTICAST_ADDRESS_XPNr4   r   r   r   r   ÚIP_ADAPTER_MULTICAST_ADDRESS_XP0  r5   r–   c                   @   r3   )z7_Win32Getter.get.<locals>.IP_ADAPTER_ANYCAST_ADDRESS_XPNr4   r   r   r   r   ÚIP_ADAPTER_ANYCAST_ADDRESS_XP3  r5   r—   c                   @   r3   )z:_Win32Getter.get.<locals>.IP_ADAPTER_DNS_SERVER_ADDRESS_XPNr4   r   r   r   r   Ú IP_ADAPTER_DNS_SERVER_ADDRESS_XP6  r5   r˜   c                   @   r3   )z._Win32Getter.get.<locals>.IP_ADAPTER_ADDRESSESNr4   r   r   r   r   ÚIP_ADAPTER_ADDRESSES9  r5   r™   ÚIfIndexÚAdapterNameÚFirstUnicastAddressÚFirstAnycastAddressÚFirstMulticastAddressÚFirstDnsServerAddressÚ	DnsSuffixÚDescriptionÚFriendlyNameÚPhysicalAddressé   ÚPhysicalAddressLengthÚFlagsÚMtuÚIfTypeÚ
OperStatusc                 S   s   d  tt| jdd… ƒ¡S )Nr6   r   é   )r0   ÚmapÚstrrs   )Ú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   )rs   )r    rl   ©Úsockaddr_in6r   r   r"   a  s    "ÿÿz9_Win32Getter.get.<locals>.format_ipv6.<locals>.<listcomp>r   rn   r   ú:c                 s   s   � | ]}|d ›V  qdS )Ú04xNr   )r    Úpartr   r   r   Ú	<genexpr>e  s   € z8_Win32Getter.get.<locals>.format_ipv6.<locals>.<genexpr>)Úranger0   )r°   Úpartsr   r¯   r   Úformat_ipv6W  s   


þz%_Win32Getter.get.<locals>.format_ipv6i˜:  TNéo   z&Error retrieving adapter information: r   )&rx   ÚWinDLLÚ	Structurerv   ÚULONGÚDWORDr�   rz   Úc_char_pÚLPWSTRry   Úc_uintÚc_ulongÚcreate_string_bufferÚvalueÚGetAdaptersAddressesÚbyrefÚprintÚcastÚcontentsr©   rˆ   r¨   r    r8   r9   r:   r   r   rŸ   r‰   r   rr   r   rB   r;   r1   r   )$r   ÚIPHLPAPIÚ	AF_UNSPECÚERROR_SUCCESSÚGAA_FLAG_INCLUDE_PREFIXÚAF_INETÚAF_INET6ÚIF_TYPE_SOFTWARE_LOOPBACKr~   r„   r…   rŒ   r�   rŽ   r�   r”   r•   r–   r—   r˜   r™   r®   r·   Úbuffer_sizeÚbufferÚret_valÚadapter_addressesÚcurrent_adapterÚoper_statusÚ
dns_suffixÚcurrent_dns_serverÚsockaddrÚsockaddr_familyÚipÚregistry_getterr   r   rƒ   r   r1   ð   sÈ   
üþì
û

ñ
ÿ




ñÜ'
z_Win32Getter.getN)r   r	   r
   r1   r   r   r   r   rm   î   s    rm   Ú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   rm   r   r   r;   r1   )Úgetterr   r   r   Úget_dns_info®  s   

üÿrà   ) ÚsysÚdns._featuresr8   Úplatformrx   Úctypes.wintypesrv   rM   Úenumr   Údns.namerO   rS   Ú	NameErrorr]   r   r   r   rÝ   Ú	_featuresÚhaveÚ	threadingr#   r   r   ÚThreadr   r   r;   rm   rÞ   rà   r   r   r   r   Ú<module>   sD    
ÿ!  = � � �Ö