o
    �õ±jc  ã                   @   s‚   d dl Z d dlZd dlmZ d dlZd dlZd dlmZ d dlT G dd„ dƒZG dd„ dƒZ	d	d
„ Z
dd„ Zedkr?eƒ  dS dS )é    N)Útqdm)ÚPath)Ú*c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚUniScannerExecutorc                 C   s   d S ©N© )Úselfr   r   úš/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/unicomm/common/scanner/scanner.pyÚ__init__
   s   zUniScannerExecutor.__init__c                 Ã   s   �|  t|dƒ¡I d H  d S )NÚalma)ÚputÚScannerData)r   ÚtargetidÚtargetÚ	out_queuer   r   r	   Úrun   s   €zUniScannerExecutor.runN)Ú__name__Ú
__module__Ú__qualname__r
   r   r   r   r   r	   r   	   s    r   c                   @   sH   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zddd„Z	dS )Ú
UniScanneréd   é   c                 C   s    || _ || _|| _|dkr|nd | _g | _d | _d | _t ¡ | _	d| _
d| _tj ¡  d¡| _|| _t| jtƒdu r?| jg| _t| jtƒdu rN| jg| _d S d S )Nr   z%Y%m%d_%H%M%SF)ÚnameÚtarget_generatorsÚworker_countÚhost_timeoutÚ_UniScanner__workersÚ_UniScanner__targetgenÚ_UniScanner__targetqueueÚasyncioÚQueuer   Ú_UniScanner__total_itemsÚ_UniScanner__finished_itemsÚdatetimeÚnowÚstrftimeÚscantimeÚ	executorsÚ
isinstanceÚlist)r   r   r'   r   r   r   r   r   r	   r
      s"   

ÿzUniScanner.__init__c                 Ã   s  �t  ¡  ¡ s…| j ¡ I d H }|d u rd S |\}}| jD ]=}zt  | ||| j¡| j	¡I d H  W q t j
y<   Y  d S  tyY } z| j t||ƒ¡I d H  W Y d }~qd }~ww |  jd7  _| j t| j| j| jƒ¡I d H  | j t||ƒ¡I d H  t  ¡  ¡ rd S d S )Né   )r   Úcurrent_taskÚ	cancelledr   Úgetr'   Úwait_forr   r   r   ÚCancelledErrorÚ	Exceptionr   ÚScannerErrorr"   ÚScannerProgressr   r!   ÚScannerTargetDone)r   Úxr   r   ÚexecutorÚer   r   r	   Úworker#   s&   €
$$€ÿ ñzUniScanner.workerc                 Ã   s2   �| j D ]}| ¡  q| jd ur| j ¡  d S d S r   )r   Úcancelr   )r   r7   r   r   r	   Ústop5   s   €


ÿzUniScanner.stopc                 Ã   s„   �z5| j D ]}| ¡ 2 z3 d H W \}}| j ||f¡I d H  q6 qtt| jƒƒD ]}| j d ¡I d H  q(W d S  tjyA   Y d S w r   )	r   r   r   r   ÚrangeÚlenr   r   r/   )r   Ú	generatorr   r   Ú_r   r   r	   Útargets;   s   €
ÿÿÿzUniScanner.targetsc              
   C  s†  �z³zz| j D ]}|  j| ¡ 7  _qt | j¡| _t| jƒD ]}| j 	t 
|  ¡ ¡¡ qt 
|  ¡ ¡| _t| jƒV  tj| jŽ }| ¡ du sM| j ¡ dkr{ztj| j ¡ dd�I d H }|V  W n tjyi   Y q@   Y n| ¡ du sM| j ¡ dksMW n ty” } ztd|ƒV  W Y d }~nd }~ww W |  ¡ I d H  t| jƒV  d S W |  ¡ I d H  t| jƒV  d S |  ¡ I d H  t| jƒV  w )NFr   r*   )Útimeoutz	!SCANNER!)r   r!   Ú	get_totalr   r    r   r   r:   r   ÚappendÚcreate_taskr7   r>   r   ÚScannerStartedr   ÚgatherÚdoner   Úqsizer.   r-   ÚTimeoutErrorr0   r1   r9   ÚScannerFinished)r   r<   r=   Úgather_coroÚresultr6   r   r   r	   ÚscanE   s@   €

ù€€ÿ€ýÿzUniScanner.scanc                 Ã   sp   �z0t  ¡  ¡ du r/t  d¡I d H  |D ]}z||  ¡  W q   Y qt  ¡  ¡ du s
W d S W d S    Y d S )NFé   )r   r+   r,   ÚsleepÚflush)r   ÚfhandlesÚkr   r   r	   Ú__flush_perionically_   s   €úzUniScanner.__flush_perionicallyTNFc                 Ã   sð  �i }t  |  |¡¡}�zK�zdd„ }i }|d u rt ¡ }nt|tƒdu r)t|ƒ}| ¡ du r6|jddd� |du rf| j	D ]}|  j
| ¡ 7  _
q=tddd| j
d	�|d
< tdddd�|d< tdddd�|d< |  ¡ 2 z­3 d H W }	|||	jƒ |	jtjkr²|du r²d|vr¦|d u rŽtj|d< nttj | ¡ dt| jƒ| jf ¡ddd�|d< |d  |	 ¡ d ¡ qj|	jtjk�r|	 ¡ }
|
d urÞt|	 ¡ dƒ�}| |
¡ W d   ƒ n1 sØw   Y  qj|
d u �r|	 ¡ }||v�r|d u rötj ||< nttj | ¡ d|| jdf ¡ddd�||< ||  |	 ¡ d ¡ qj6 W n t!�y5 } zt"dt|ƒ ƒ W Y d }~nd }~ww W | #¡  |  $¡ I d H  |D ]}z	||  %¡  W �qD   Y �qDd S | #¡  |  $¡ I d H  |D ]}z	||  %¡  W �qe   Y �qew )Nc                 S   s†   t | ƒdkrd S |tjkr| d  ¡  d S |tjkr"| d  ¡  d S |tjkr4| D ]}| |  ¡  q)d S |tjkrA| d  ¡  d S d S )Nr   Úerrorsr>   Úresults)r;   ÚScannerResultTypeÚERRORÚupdateÚPROGRESSÚFINISHEDÚrefreshÚDATA)ÚpbarÚrtyperP   r   r   r	   Úupdate_pbaro   s   


ÿ
ÿz0UniScanner.scan_and_process.<locals>.update_pbarTF)ÚparentsÚexist_okzTargets     Ú r   )ÚdescÚunitÚpositionÚtotalr>   zResults     r*   )ra   rb   rc   rS   zErrors      é   rR   Úerrorz%s_error_%s.tsvÚw)Únewlinez
Úwbz%s_%s%sz.tsvzSCANNER CRITICAL ERROR %s)&r   rB   Ú_UniScanner__flush_perionicallyr   Úcwdr(   ÚstrÚexistsÚmkdirr   r!   r@   r   rK   ÚtyperT   rU   ÚsysÚstderrÚopenÚosÚpathÚjoinÚabsoluter   r&   ÚwriteÚto_linerZ   Ú	get_fdataÚ	get_fnameÚget_nameÚstdoutr0   Úprintr8   r9   Úclose)r   ÚprogressÚout_fileÚinclude_errorsrO   Ú
flush_taskr]   r[   r<   rJ   ÚfiledataÚfr\   r6   rP   r   r   r	   Úscan_and_processk   s~   €

0ÿ

,€è€ÿ€üþüzUniScanner.scan_and_process)r   r   )TNF)
r   r   r   r
   r7   r9   r>   rK   rj   r…   r   r   r   r	   r      s    

r   c               
   Ã   s¸   �zCt ƒ } ddlm} ddlm} | d¡}td| gƒ}|j | 	ddg¡¡ | 
¡ 2 z3 d H W }t|ƒ |jtjkr@t|jƒ q+6 W d S  ty[ } zt ¡  W Y d }~d S d }~ww )Nr   )ÚUniTargetGen)ÚSMBConnectionFactoryzPsmb2+kerberos-password://TEST.corp\Administrator:Passw0rd!1@win2019ad.test.corp/ÚTESTz
10.10.10.2z
10.10.10.3)r   Ú)asysocks.unicomm.common.scanner.targetgenr†   Ú!aiosmb.commons.connection.factoryr‡   Úfrom_urlr   r   rA   Ú	from_listrK   r}   ro   rT   rU   Údatar0   Ú	tracebackÚ	print_exc)r5   r†   r‡   ÚconnectionfactoryÚscannerr4   r6   r   r   r	   Úamain±   s$   €

€ý€ÿr’   c                   C   s   t  tƒ ¡ d S r   )r   r   r’   r   r   r   r	   ÚmainÂ   s   r“   Ú__main__)r   rŽ   r   r#   rp   Úpathlibr   Ú&asysocks.unicomm.common.scanner.commonr   r   r’   r“   r   r   r   r   r	   Ú<module>   s     "
ÿ