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r�t d| ¡ 	 W d   ƒI d H  q#| jdu r¢tjd| |jdddd�}tjdd�}|j}zSt|dƒ�9}| ¡ 2 z+3 d H W \}}
|
d urÊt d| ¡ q¶|d u rÐ n| |¡ | jdu rá| t |ƒ¡ q¶6 W d   ƒ n1 síw   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 qˆt|ƒdkr¶|j t|ƒ¡ t|jƒdkrÃt
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Úurlz—Connection 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-
ÿ