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re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re  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rd 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 } zt|ddkr.d}nat|d	dkrt |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 rd}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

