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 )
UniScannerd      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  zzz| 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 z3 d H W }	|||	j |	jtjkr|du rd|vr|d u rt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rt|	 d}||
 W d    n1 sw   Y  qj|
d u r|	 }||vr|d u rt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     "
