o
    Žõ±j  ã                   @   s–   d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ G dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZG dd„ dƒZdS )é    N)ÚThread)ÚProcessÚQueue)Úlogger)ÚNetShareEnum)Ú
is_port_up)ÚUniversalEncoderc                   @   ó   e Zd Zddd„Zdd„ ZdS )	ÚShareEnumThreadé   Tc                 C   s&   t  | ¡ || _|| _|| _|| _d S ©N)r   Ú__init__ÚinQÚoutQÚtimeoutÚ	pre_check)Úselfr   r   r   r   © r   ú˜/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/remote/live/share/enumerator.pyr      s
   

zShareEnumThread.__init__c              
   C   sÚ   	 | j  ¡ }|s
d S | jdu r<zt|d| jdddu rW q W n ty; } z| j |d t|ƒf¡ W Y d }~q d }~ww zt	|ddD ]}| j ||d f¡ qCW n tyk } zt
 dt|ƒ ¡ W Y d }~q d }~ww q)NTi½  )r   ÚthrowFr   )ÚlevelzShareEnumerator error: %s)r   Úgetr   r   r   Ú	Exceptionr   ÚputÚstrr   r   Údebug)r   ÚtargetÚeÚsharer   r   r   Úrun   s0   

ÿ€þÿ€þñzShareEnumThread.runN©r   T©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r
      s    
r
   c                   @   r	   )	ÚShareEnumProcr   Tc                 C   s2   t  | ¡ || _|| _|| _g | _|| _|| _d S r   )r   r   r   r   Ú	threadcntÚthreadsr   r   )r   r   r   r&   r   r   r   r   r   r   (   s   

zShareEnumProc.__init__c                 C   sZ   t | jƒD ]}t| j| j| j| jd}d|_| ¡  | j	 
|¡ q| j	D ]}| ¡  q$d S )N©r   r   T)Úranger&   r
   r   r   r   r   ÚdaemonÚstartr'   ÚappendÚjoin)r   ÚiÚtr   r   r   r   1   s   

ÿzShareEnumProc.runNr    r!   r   r   r   r   r%   '   s    
	r%   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
Ú	SMResProcNFc                 C   s,   t  | ¡ || _i | _i | _|| _|| _d S r   )r   r   r   ÚresultsÚerrorsÚout_fileÚto_json)r   r   r3   r4   r   r   r   r   ;   s   

zSMResProc.__init__c                 C   s   d S r   r   ©r   r   r   r   ÚsetupC   s   zSMResProc.setupc              	   C   s   |   ¡  	 | j ¡ }|snh|\}}}|d ur1| jdu r+| jd u r+td|t|ƒf ƒ n|| j|< q| jdu rK|| jvr@g | j|< | j|  	| 
¡ ¡ n)d||j|j|j|jf }| jd urp|| jvrgg | j|< | j|  	|¡ nt|ƒ q| jd u r| jdu rd S t d¡ | jd urît| jdddQ}| jdu r«| tj| j| jd	œtd
dd¡ n)| jD ]}| j| D ]}| d||f ¡ qµq®| jD ]}| d|| j| f ¡ qÅW d   ƒ d S W d   ƒ d S 1 sçw   Y  d S ttj| j| jd	œtd
ddƒ d S )NTFz%s : %sz%s %s %s %s %szWriting results...ÚwÚ )Únewline)r1   r2   é   )ÚclsÚindentÚ	sort_keysz%s %s
)r6   r   r   r4   r3   Úprintr   r2   r1   r,   Úto_dictÚnetnameÚtypeÚremarkÚpasswdr   ÚinfoÚopenÚwriteÚjsonÚdumpsr   )r   Úresultr   r   ÚerrÚfÚresr   r   r   r   F   sP   








ã


$
ÿ
úþ"ù$
zSMResProc.run)NF)r"   r#   r$   r   r6   r   r   r   r   r   r0   :   s    
r0   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚShareEnumeratorc                 C   sJ   g | _ tƒ | _tƒ | _g | _d | _d| _d| _d| _d| _	d | _
d| _d S )Nr:   r   TF)Úhostsr   r   r   ÚagentsÚresult_processÚagent_proccntÚagent_threadcntr   r   r3   r4   r5   r   r   r   r   {   s   
zShareEnumerator.__init__c                 C   s<   d}dg}|  ||¡D ]}| j |d d d d… ¡ qd S )Nz(&(sAMAccountType=805306369))ÚsAMAccountNameÚ
attributeséÿÿÿÿ)ÚpagedsearchrN   r,   )r   ÚldapÚldap_filterrT   Úentryr   r   r   Úload_targets_ldap‹   s
   ÿz!ShareEnumerator.load_targets_ldapc                 C   sX   t |dƒ}|D ]}| ¡ }|dkrq| j |¡ qW d   ƒ d S 1 s%w   Y  d S )NÚrr8   )rE   ÚstriprN   r,   )r   ÚfilenamerK   Úliner   r   r   Úload_targets_file’   s   ü"ÿz!ShareEnumerator.load_targets_filec                 C   s   |  j |7  _ d S r   )rN   )r   Útargetsr   r   r   Úload_tagetsš   s   zShareEnumerator.load_tagetsc                 C   sæ   t | j| j| jd| _d| j_| j ¡  t| jƒD ]}t	| j
| j| j| j| jd}d|_| ¡  | j |¡ qt d¡ | jD ]}| j
 |¡ q?| jD ]}t| jƒD ]}| j
 d ¡ qRqK| jD ]}| ¡  q_| j d ¡ | j ¡  d S )N)r3   r4   Tr(   z=== Enumerating shares ===)r0   r   r3   r4   rP   r*   r+   r)   rQ   r%   r   rR   r   r   rO   r,   r   rD   rN   r   r-   )r   r.   Úpr/   Úar   r   r   r      s&   



ÿ

zShareEnumerator.runN)r"   r#   r$   r   rZ   r_   ra   r   r   r   r   r   rM   z   s    rM   )rG   Ú	threadingr   Úmultiprocessingr   r   Úpypykatzr   Ú4pypykatz.commons.winapi.local.function_defs.netapi32r   Ú"pypykatz.remote.live.common.commonr   Úpypykatz.commons.commonr   r
   r%   r0   rM   r   r   r   r   Ú<module>   s    @