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   zt  | _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 rtjd	| |	jd
ddd}
t|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 d   I d H  n1 I d H sw   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 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)r[   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")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-
