o
    jr                     @   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)NetSessionEnum)
is_port_up)UniversalEncoderc                   @      e Zd ZdddZdd ZdS )	SessMonThread   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/session/enumerator.pyr      
   

zSessMonThread.__init__c              
   C   s   	 | j  }|s
d S | jdu rt|d| jddu rq zt|ddD ]
}| j||f q!W n tyH } zt	
dt|  W Y d }~q d }~ww q)NTi  )r   Fr   )levelzSessionMonitor error: %s)r   getr   r   r   r   r   put	Exceptionr   debugstr)r   targetshareer   r   r   run   s"   

zSessMonThread.runNr   T__name__
__module____qualname__r   r   r   r   r   r   r
      s    
r
   c                   @   r	   )	SessMonProcr   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SessMonProc.__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   .   s   

zSessMonProc.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 | _|| _|| _d S r   )r   r   r   resultsout_fileto_json)r   r   r2   r3   r   r   r   r   8   r   zSMResProc.__init__c                 C   s   d S r   r   r   r   r   r   setup?   s   zSMResProc.setupc              	   C   s  |    	 | j }|snJ|\}}| jdu r+|| jvr g | j|< | j| |  n+|jdd}d|||j	f }| j
d urR|| jvrIg | j|< | j| | nt| q| j
d u rc| jdu rcd S td | j
d urt| j
ddd;}| jdu r|tj| jtd	dd
 n| jD ]}| j| D ]}|d||f  qqW d    d S W d    d S 1 sw   Y  d S ttj| jtd	dd
 d S )NTz\\ z%s %s %sFzWriting results...w)newline   )clsindent	sort_keysz%s %s
)r5   r   r   r3   r1   r,   to_dictcomputernamereplaceusernamer2   printr   infoopenwritejsondumpsr   )r   resultr   sessionipfresr   r   r   r   B   sD   










"zSMResProc.run)NF)r"   r#   r$   r   r5   r   r   r   r   r   r0   7   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 )SessionMonitorc                 C   sJ   g | _ t | _t | _g | _d | _d| _d| _d| _d| _	d | _
d| _d S )Nr9   r   TF)hostsr   r   r   agentsresult_processagent_proccntagent_threadcntr   r   r2   r3   r4   r   r   r   r   j   s   
zSessionMonitor.__init__c                 C   s<   d}dg}| ||D ]}| j|d d d d  qd S )Nz(&(sAMAccountType=805306369))sAMAccountName
attributes)pagedsearchrM   r,   )r   ldapldap_filterrS   entryr   r   r   load_targets_ldapz   s
   z SessionMonitor.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rr6   )rC   striprM   r,   )r   filenamerJ   liner   r   r   load_targets_file   s   "z SessionMonitor.load_targets_filec                 C   s   |  j |7  _ d S r   )rM   )r   targetsr   r   r   load_tagets   s   zSessionMonitor.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)r2   r3   Tr(   z=== Polling sessions ===)r0   r   r2   r3   rO   r*   r+   r)   rP   r%   r   rQ   r   r   rN   r,   r   rB   rM   r   r-   )r   r.   pr/   ar   r   r   r      s&   





zSessionMonitor.runN)r"   r#   r$   r   rY   r^   r`   r   r   r   r   r   rL   i   s    rL   )rE   	threadingr   multiprocessingr   r   pypykatzr   4pypykatz.commons.winapi.local.function_defs.netapi32r   "pypykatz.remote.live.common.commonr   pypykatz.commons.commonr   r
   r%   r0   rL   r   r   r   r   <module>   s   2