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m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rNeƒ  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/smbget.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   3   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  |  ¡ ¡| _	 | j ¡ I d H }|d u rW dS |\}}t|ƒ}|j}t	ƒ  | j
 | dd¡ d¡d ¡}|4 I d H šœ | ¡ I d H \}}|d urR|‚t	|ƒ 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|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 d   ƒI d H  n1 I d H säw   Y  q tyÿ } z
d|fW  Y d }~S d }~ww )NT)TNz\\r   ú\r   r   zError Downloading file %szDownloading %sÚBi   )Údescr5   ÚunitÚ
unit_scaleÚunit_divisorÚwbF)r   ÚQueuer.   Úcreate_taskÚ_SMBGET__target_genr0   Úgetr   Únamer3   r,   Úcreate_connection_newtargetÚreplaceÚsplitÚloginr   Úfrom_uncpathr   r   Úinfor1   ÚtqdmÚsizeÚread_chunkedÚwriteÚupdateÚlenr   )r   ÚtÚtidr)   ÚuncÚ	file_nameÚ
connectionÚ_r6   ÚsmbfileÚpbarr   Údatar    r   r   r   r!   C   s\   €

ö


€ö€ÿ(ñö'€ÿz
SMBGET.runN)F)r#   r$   r%   r   rA   r!   r   r   r   r   r*   2   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)r[   Ú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")r^   r(   Ú*z1UNC paths of file eg. \\HOST\SHARE\file_or_folder)Únargsr^   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*   ÚprogressrO   r(   Ústdinr-   Úappendr'   r   Úcloser   r!   )	rd   re   ÚparserÚargsr2   ÚsmbgetÚnotfiler)   r   r   r   r   Úamains   sF   €




rx   c                   C   s   t  tƒ ¡ d S r	   )r   r!   rx   r   r   r   r   Úmain    s   ry   Ú__main__)rk   rJ   Úaiosmbr   r   r   Úpathlibr   Ú!aiosmb.commons.connection.factoryr   Úaiosmb.commons.interfaces.filer   r   r'   r*   rx   ry   r#   r   r   r   r   Ú<module>   s    A-
ÿ