o
    j                     @   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Zd dlZd dlZd dl	m
Z
 d dlZd dlmZ d dlmZ G dd dZ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)logger)PureWindowsPath)SMBConnectionFactory)SMBFilec                   @      e Zd Zdd Zdd ZdS )FileTargetGenc                 C   
   || _ d S N)filename)selfr
    r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/examples/smbgetfilezip.py__init__      
zFileTargetGen.__init__c              
      s   zEd}t | jd0}|D ]%}| }|dkrq|tt |fI d H  tdI d H  |d7 }qW d    n1 s=w   Y  |d fW S  t	y\ } z
||fW  Y d }~S d }~ww )Nr   r    )
openr
   stripputstruuiduuid4asynciosleep	Exception)r   target_qcntflineer   r   r   run   s$   

zFileTargetGen.runN__name__
__module____qualname__r   r!   r   r   r   r   r          r   c                   @   r   )ListTargetGenc                 C   r   r	   )targets)r   r(   r   r   r   r   $   r   zListTargetGen.__init__c              
      s   z+d}| j D ] }|d7 }| }|tt |fI d H  tdI d H  q|d fW S  tyB } z
||fW  Y d }~S d }~ww )Nr   r   )	r(   r   r   r   r   r   r   r   r   )r   r   r   targetr    r   r   r   r!   '   s   

zListTargetGen.runNr"   r   r   r   r   r'   #   r&   r'   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
SMBGETFc                 C   s.   t || _g | _d | _d| _d | _|| _d S )Nr   )r   from_urlsmb_mgrtarget_genstask_q_SMBGET__total_targetstarget_gen_taskshow_progress)r   smb_urlr1   r   r   r   r   6   s   
zSMBGET.__init__c                    s\   | j D ]'}|| jI d H \}}|  j|7  _|d ur"td|  | jd I d H  qd S )NzTarget gen error! %s)r-   r!   r.   r/   printr   )r   
target_gentotalerrr   r   r   __target_gen>   s   
zSMBGET.__target_genc                    s~  z%t  | _t |  | _dtj d d}t	
|d}	 | j I d H }|d u r:	 W d    W dS |\}}t|}|j}| j|ddd	d
 }|4 I d H  | I d H \}	}
|
d urj|
t|}||dI d H \}	}
|
d urtd|  	 W d   I d H  q#| jdu rtjd| |jdddd}tjdd}|j}zSt|d9}| 2 z+3 d H W \}}
|
d urtd|  q|d u r n|| | jdu r|t | q6 W d    n1 sw   Y  ||| W t!"| nt!"| w W d   I d H  n1 I d H sw   Y  q$1 s w   Y  W dS  t#y> } z
d|fW  Y d }~S d }~ww )Noutput_z%Y%m%d_%H%M%Sz.zipwT)TNz\\r   \r   r   zError Downloading file %szDownloading %sBi   )descr5   unit
unit_scaleunit_divisorF)deletewb)$r   Queuer.   create_task_SMBGET__target_genr0   datetimenowstrftimezipfileZipFilegetr   namer,   create_connection_newtargetreplacesplitloginr   from_uncpathr   r   infor1   tqdmsizetempfileNamedTemporaryFileread_chunkedwriteupdatelenosremover   )r   zip_file_pathzip_filettidr)   unc	file_name
connection_r6   smbfilepbar	temp_filetemp_file_pathr   datar    r   r   r   r!   F   sl   




*/z
SMBGET.runN)F)r#   r$   r%   r   rD   r!   r   r   r   r   r*   5   s    
r*   c            	         s  dd l } dd l}| jdd}|jddddd |jdd	d
dd |jdd
dd |jddd |jdddd | }|jdkrGttj	 |jdkrct
d td t d tjtj	d |j}t||jd}g }t|jdkr|jdu r|jt|j n#|jD ]}zt|d}|  |jt| W q   || Y qt|dkr|jt| t|jdkrt
d d S | I d H  d S )Nr   zSMB Share enumerator)descriptionz-vz	--verbosecount)actiondefaultz-sz--stdin
store_truezRead targets from stdin)rk   helpz
--progresszShow progressurlzConnection URL base, target can be set to anything. Owerrides all parameter based connection settings! Example: "smb2+ntlm-password://TEST\victim@test")rn   r(   *z1UNC paths of file eg. \\HOST\SHARE\file_or_folder)nargsrn   r      zsetting deepdebugT)level)r1   r   z#[-] No suitable targets were found!)argparsesysArgumentParseradd_argument
parse_argsverboser   setLevelloggingDEBUGr3   r   get_event_loop	set_debugbasicConfigr2   r*   progressrY   r(   stdinr-   appendr'   r   closer   r!   )	rt   ru   parserargsr2   smbgetnotfiler)   r   r   r   r   amain   sF   




r   c                   C   s   t t  d S r	   )r   r!   r   r   r   r   r   main   s   r   __main__)r{   rR   aiosmbr   r   r   rH   rT   rZ   pathlibr   rE   !aiosmb.commons.connection.factoryr   aiosmb.commons.interfaces.filer   r   r'   r*   r   r   r#   r   r   r   r   <module>   s(   K-
