o
    àý°jÒ  ã                
   @   s¤  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	m
Z
 d dlmZmZ G dd„ dƒZed	krÐeejƒ e jd
dd�Zejdd
dddd� ejdd
ddd� ejdddd� ejddeddd� ejdddd� eejƒdkr€e ¡  e d¡ e ¡ Ze
 ejej¡ zeejej ej!ƒZ"e #d ej› �¡ e" $¡  W dS  e%yÏ Z& ze '¡ j(ej)kr½d dl*Z*e* +¡  e ,e-e&ƒ¡ W Y dZ&[&dS dZ&[&ww dS )!é    N)ÚResolver)ÚSysCallError)Úversion)Úlogger)ÚLDAPConnectionÚLDAPSessionErrorc                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	CheckLDAPc                 C   s   || _ || _|| _d S )N)ÚdomainÚdc_ipÚtimeout)Úselfr	   r
   r   © r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/../../../bin/CheckLDAPStatus.pyÚ__init__   s   
zCheckLDAP.__init__c                 C   sX   g }t ƒ }| j|_| jg|_|jd| j› �ddd�}|D ]}| t|jƒ 	d¡¡ q|S )Nz_ldap._tcp.dc._msdcs.ÚSRVT)ÚtcpÚ.)
r   r   r
   ÚnameserversÚresolver	   ÚappendÚstrÚtargetÚrstrip)r   Údc_listÚresolverÚdc_queryÚdcr   r   r   Úlist_dc$   s   
ÿzCheckLDAP.list_dcc                 C   s`   |   ¡ }t dt|ƒ› d| j› �¡ |D ]}|  |¡}|  |¡}td|› d|› d|› �ƒ qd S )NzFound z domain controller(s) in z
Hostname: z
	> LDAP Signing Required: z"
	> LDAPS Channel Binding Status: )r   ÚloggingÚinfoÚlenr	   Úcheck_ldap_signingÚcheck_ldaps_cbtÚprint)r   r   r   Úsigning_requiredÚchannel_binding_statusr   r   r   Úrun/   s   

ýzCheckLDAP.runc                 C   sœ  d}d|› �}zt |d�}d |_|jd| jd� W |S  ty¨ } z‚t|ƒ d¡dkr.d}nat|ƒ d	¡dkr€t |d�}t|jƒ}|d
 d d |d< t|ƒ|_z
|jd| jd� W n; ty } zt|ƒ d¡dkrut	 
d|› �¡ d}W Y d }~n"d }~ww t	 
d|›�¡ W Y d }~|S W Y d }~|S W Y d }~|S W Y d }~|S d }~w tyÍ } zt	 
d|›�¡ |jd dv rÁd}n‚ W Y d }~|S d }~ww )NÚNeverzldaps://)Úurlú )Úuserr	   zdata 80090346r   ÚAlwayszdata 52eé   é   é   é   z9LDAPS channel binding is set to 'When Supported' on host zWhen SupportedzYLDAPSessionError while checking for channel binding requirements (likely NTLM disabled): zHReceived SysCallError when trying to enumerate channel binding support: )Ú
ECONNRESETÚWSAECONNRESETzUnexpected EOFzNo TLS cert)r   Úchannel_binding_valueÚloginr	   r   r   ÚfindÚ	bytearrayÚbytesr   Údebugr   Úargs)r   ÚhostnameÚ
cbt_statusÚldap_urlÚldap_connectionÚeÚnew_cbvr   r   r   r"   7   sR   

é


€ý
ë
ó
€ €ú
þ€úzCheckLDAP.check_ldaps_cbtc              
   C   s¬   d}d|› �}zt |dd�}|j| jd� t d|› �¡ W |S  tyU } z*t|ƒ d¡dkr;t d|› �¡ d	}nt d
|›�¡ W Y d }~|S W Y d }~|S d }~ww )NFzldap://)r(   Úsigning)r	   z LDAP signing is not enforced on ÚstrongerAuthRequiredr   zLDAP signing is enforced on TzQLDAPSessionError while checking for signing requirements (likely NTLM disabled): )r   r3   r	   r   r7   r   r   r4   )r   r9   r$   r;   r<   r=   r   r   r   r!   W   s"   
ú
ý€úzCheckLDAP.check_ldap_signingN)Ú__name__Ú
__module__Ú__qualname__r   r   r&   r"   r!   r   r   r   r   r      s     r   Ú__main__Tz5LDAP signing and channel binding enumeration utility.)Úadd_helpÚdescriptionz-dc-ipÚstorez
ip addresszCIP Address of a domain controller or a DNS resolver for the domain.)ÚrequiredÚactionÚmetavarÚhelpz-domainz<domain name>)rH   rI   rK   z-debugÚ
store_truezTurn DEBUG output ON)rI   rK   z-timeoutr/   zDNS timeout)rI   ÚtypeÚdefaultrK   z-tsz&Adds timestamp to every logging outputr-   zTargeted domain: ).Úargparser   ÚsysÚdns.resolverr   ÚOpenSSL.SSLr   Úimpacketr   Úimpacket.examplesr   Úimpacket.ldap.ldapr   r   r   rA   r#   ÚBANNERÚArgumentParserÚparserÚadd_argumentÚintr    ÚargvÚ
print_helpÚexitÚ
parse_argsÚoptionsÚinitÚtsr7   r	   r
   r   Údumperr   r&   Ú	Exceptionr=   Ú	getLoggerÚlevelÚDEBUGÚ	tracebackÚ	print_excÚerrorr   r   r   r   r   Ú<module>   sD   H

€üê