o
    Žõ±j±²  ã                   @   s¦  d dl Z d dlZd dlZd dlZd dlZd dlZd dl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mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z'm(Z( d dl)mZ* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0T d dl1T G dd„ dej2ƒZ3g ddddfde4dee4 de5de5de5de5fdd„Z6dd„ Z7e8dkrÑe7ƒ  dS dS ) é    N)ÚListÚDict)Úaiocmd©ÚSMBPathCompleter©Úlogger)Ú
__banner__)ÚSMBConnectionFactory)ÚSMBConnection)Ú
SMBMachine)ÚSMBShare)ÚSMBFile)ÚSMBDirectory)ÚSMBException)ÚDCERPCException)Ú
sizeof_fmtÚsize_to_bytes)Úfaccess_basic_checkÚfaccess_mask_to_unixÚfaccess_mask_to_tsvÚfaccess_match)Ú*c                   @   s:  e Zd Zd¼dd„Zd½dd„Zdd„ Zd½d	d
„Zdd„ Zdd„ Zdd„ Z	d¾dd„Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd¾d$d%„Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd¿d5ed6ed7efd8d9„Zd:d;„ Zd<d=„ Zd>d?„ Z d@dA„ Z!dBdC„ Z"dDdE„ Z#dFdG„ Z$dHdI„ Z%dJdK„ Z&dLdM„ Z'dNdO„ Z(dPdQ„ Z)dRdS„ Z*dTdU„ Z+dVdW„ Z,d½dXdY„Z-dZd[„ Z.d\d]„ Z/dÀd^d_„Z0d`da„ Z1dbdc„ Z2ddde„ Z3dfdg„ Z4dhdi„ Z5djdk„ Z6dldm„ Z7dÁdndo„Z8dpdq„ Z9d½drds„Z:d½dtdu„Z;d½dvdw„Z<dxdy„ Z=dzd{„ Z>d|d}„ Z?dÂdd€„Z@d½d�d‚„ZAdƒd„„ ZBdÀd…d†„ZCd‡dˆ„ ZDdÃdŠd‹„ZEdŒd�„ ZFdÄd�d�„ZGdÄd‘d’„ZHd½d“d”„ZId•d–„ ZJd½d—efd˜d™„ZKd½d—efdšd›„ZLd½dœed—efd�dž„ZMd½dœed—efdŸd „ZNd¡d¢„ ZOdÂd£d¤„ZPdÄd¥efd¦d§„ZQdÄd¨d©„ZRdÄdªd«„ZSdÄd¬d­„ZTdÄd®d¯„ZUdÄd°d±„ZVdÄd²d³„ZWdÄd´dµ„ZXdÅd¶eYfd·d¸„ZZdÆdºd»„Z[dS )ÇÚ	SMBClientNFc                 C   sz   t jj| dd� d | _|d urt |¡| _d | _d | _d| _|| _	|| _
|| _i | _d | _d | _d | _d | _d| jd< d S )NF)Úignore_sigintÚlsÚll)r   ÚPromptToolkitCmdÚ__init__Úconn_urlr
   Úfrom_urlÚ
connectionÚmachineÚis_anonÚsilentÚnosigÚno_dceÚsharesÚ_SMBClient__current_shareÚ_SMBClient__current_directoryÚ_SMBClient__current_usersidÚ_SMBClient__current_user_groupsÚaliases)ÚselfÚurlr$   r&   r%   © r/   úŒ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/examples/smbclient.pyr   %   s    zSMBClient.__init__c                    s  t  ¡ d }|j}t  |d ¡\}}}‰ ‡ fdd„|D ƒ}d|v r$|d= t|ƒdkrE|d7 }| ¡ D ]\}}	|d||	f 7 }q2|d d… }| d	¡rP|d
d … }d| }
t|tƒr`|
| 	¡ 7 }
n|
d| 7 }
|d urp|d |
 }
t
|
ƒ d t t|ƒ||j¡¡}t d|¡ d|fS )Né   r   c                    s   i | ]}|ˆ | “qS r/   r/   )Ú.0Úarg©Úvaluesr/   r0   Ú
<dictcomp>=   s    z.SMBClient.handle_exception.<locals>.<dictcomp>r-   ú z%s=%s éÿÿÿÿÚdo_é   zCMD: "%s" ERR: z	Error: %sÚ zTraceback:
%sF)ÚinspectÚstackÚfunctionÚgetargvaluesÚlenÚitemsÚ
startswithÚ
isinstancer   ÚpprintÚprintÚjoinÚ	tracebackÚformat_exceptionÚtypeÚ__traceback__r   Údebug)r-   ÚeÚmsgÚframeÚcallerÚargsÚ_Úcaller_argsÚkÚvÚto_printÚformatted_exceptionr/   r4   r0   Úhandle_exception8   s.   

zSMBClient.handle_exceptionc              
   Ã   s¸   �z@ddl m} ddlm} ddlm} ddlm} t| jƒ t| jj 	¡ ƒ td| ƒ td| ƒ td| ƒ td| ƒ W dS  t
y[ } zt ¡  d |fW  Y d }~S d }~ww )Nr   )Ú__version__z
AIOSMB: %szASYSOCKS: %szMINIKERBEROS: %sz
WINACL: %s©TN)Úaiosmb._versionrX   Úasysocks._versionÚminikerberos._versionÚwinacl._versionrE   r   r"   r!   Úget_extra_infoÚ	ExceptionrG   Ú	print_exc)r-   ÚsmbverÚsocksverÚkerbverÚ	winaclverrL   r/   r/   r0   Ú
do_coninfoe   s$   €
€þzSMBClient.do_coninfoc              
   Ã   s  �zk| j du r|du rtdƒ |durt |¡| _ | j  ¡ }| j j| jd�| _t 	| j  ¡ ¡ t 	| j  
¡ ¡ | j ¡ I dH \}}|durG|‚| jj ¡ | _t| jƒ| _| jdu ra|  d¡I dH  | jdu rjtdƒ W dS  tyˆ } zt ¡  |  |d¡W  Y d}~S d}~ww )zConnects to the remote machineNzNo url was set, cant do logon)ÚnosignFzLogin successrY   zLogin failed!)r   rE   r
   r    Úget_credentialÚget_connectionr%   r!   r   rK   Ú
get_targetÚloginÚgssapiÚis_guestr#   r   r"   r&   Ú	do_sharesr$   r_   rG   r`   rW   )r-   r.   ÚcredrQ   ÚerrrL   r/   r/   r0   Údo_loginx   s2   €


€þzSMBClient.do_loginc              
   Ã   sz   �| j d ur| j  ¡ I d H  d | _ | jd ur8z
| j ¡ I d H  W n ty7 } zt d¡ W Y d }~nd }~ww d | _d S )Nzconnection.close)r"   Úcloser!   Ú	terminater_   r   Ú	exception)r-   rL   r/   r/   r0   Ú	do_logout•   s   €

€ÿ
zSMBClient.do_logoutc                 Ã   s   �|   ¡ I d H  d S ©N)rt   ©r-   r/   r/   r0   Ú	_on_close¡   s   €zSMBClient._on_closec                 Ã   s   �d| _ dS )z)Disables automatic share listing on loginTN)r&   rv   r/   r/   r0   Údo_nodce¤   s   €
zSMBClient.do_nodceTc              
   Ã   s    �z7| j du rtdƒ dtdƒfW S | j  ¡ 2 z3 dH W \}}|dur%|‚|| j|j< |du r4t|jƒ q6 W dS  tyO } z|  |¡W  Y d}~S d}~ww )zLists available sharesNz!Not logged in! Use "login" first!FzNot logged in!TrY   )r"   rE   r_   Úlist_sharesr'   ÚnamerW   )r-   ÚshowÚsharero   rL   r/   r/   r0   rm   ¨   s$   €

€û€ÿzSMBClient.do_sharesc              
   Ã   sv   �z"| j  ¡ 2 z3 dH W \}}|dur|‚td|j|jf ƒ q6 W dS  ty: } z|  |¡W  Y d}~S d}~ww )ú!Lists sessions of connected usersNú%s : %s)r"   Úlist_sessionsrE   ÚusernameÚip_addrr_   rW   ©r-   Úsessro   rL   r/   r/   r0   Údo_sessions¹   s   €ý€ÿzSMBClient.do_sessionsc              
   Ã   sp   �z| j  ¡ 2 z3 dH W \}}|dur|‚td|j ƒ q6 W dS  ty7 } z|  |¡W  Y d}~S d}~ww )r}   Nz%s)r"   Úwkstlist_sessionsrE   r€   r_   rW   r‚   r/   r/   r0   Údo_wsessionsÄ   s   €ý€ÿzSMBClient.do_wsessionsc              
   Ã   sj   �z| j  ¡ 2 z3 dH W \}}|dur|‚t|ƒ q6 W dS  ty4 } z|  |¡W  Y d}~S d}~ww )zLists domainN)r"   Úlist_domainsrE   r_   rW   )r-   Údomainro   rL   r/   r/   r0   Ú
do_domainsÎ   s   €
ý€ÿzSMBClient.do_domainsc              
   Ã   st   �z!| j  ¡ 2 z3 dH W \}}}|dur|‚td||f ƒ q6 W dS  ty9 } z|  |¡W  Y d}~S d}~ww )zLists local groupsNr~   )r"   Úlist_localgroupsrE   r_   rW   )r-   rz   Úsidro   rL   r/   r/   r0   Údo_localgroupsØ   s   €ý€ÿzSMBClient.do_localgroupsc              
   Ã   sv   �z"| j  |¡2 z3 dH W \}}}|dur|‚td||f ƒ q6 W dS  ty: } z|  |¡W  Y d}~S d}~ww )zLists groups in a domainNr~   )r"   Úlist_groupsrE   r_   rW   )r-   Údomain_namerz   r‹   ro   rL   r/   r/   r0   Údo_domaingroupsâ   s   €ý€ÿzSMBClient.do_domaingroupsc              
   Ã   s|   �z%| j  ||¡2 z3 dH W \}}}}|dur|‚td|||f ƒ q	6 W dS  ty= } z|  |¡W  Y d}~S d}~ww )z#Lists members of an arbitrary groupNú
%s\%s : %s©r"   Úlist_group_membersrE   r_   rW   )r-   rŽ   Ú
group_namerˆ   r€   r‹   ro   rL   r/   r/   r0   Údo_groupmembersì   s   €"ý€ÿzSMBClient.do_groupmembersc              
   Ã   s|   �z%| j  d|¡2 z3 dH W \}}}}|dur|‚td|||f ƒ q	6 W dS  ty= } z|  |¡W  Y d}~S d}~ww )zLists members of a local groupÚBuiltinNr�   r‘   )r-   r“   rˆ   r€   r‹   ro   rL   r/   r/   r0   Údo_localgroupmembersö   s   €"ý€ÿzSMBClient.do_localgroupmembersc              
   Ã   sx   �z#| j  d||¡I dH \}}|dur|‚|rtdƒ W dS tdƒ W dS  ty; } z|  |¡W  Y d}~S d}~ww )z$Add member (by SID) to a local groupr•   NzModification OK!z"Something went wrong, status != ok)r"   Úadd_sid_to_grouprE   r_   rW   )r-   r“   r‹   Úresultro   rL   r/   r/   r0   Údo_addsidtolocalgroup  s   €€ÿzSMBClient.do_addsidtolocalgroupc              
   Ã   s´   �zA| j  ¡ I dH \| _}| _| _}|dur|‚|du r@td| j ƒ td| ƒ td| j ƒ tdƒ | jD ]}td| ƒ q7W dS  tyY } z|  |¡W  Y d}~S d}~ww )	zPrints current userNTúUsername: %sz
Domain: %szSID: %szGroups:z %srY   )r"   ÚwhoamiÚ_SMBClient__current_usernamer*   r+   rE   r_   rW   )r-   rU   Ú
domainnamero   ÚgrouprL   r/   r/   r0   Ú	do_whoami  s"   € 
€ÿzSMBClient.do_whoamic              
   Ã   s2  �z€| j du s
| jrBt| jƒdkr"| jdd�I dH \}}|dur"|‚|| jvr;| ¡ | jvr7td| ƒ W dS | ¡ }| j| | _nt 	d| j
j ¡ |f ¡| _| j | j
¡I dH \}}|durb|‚| jjd | _d| jj | _|  ¡ I dH \}}|dur|‚W d	S  ty˜ } z|  |¡W  Y d}~S d}~ww )
zselects share to be usedFr   )r{   NzError! Uknown share name %sz\\%s\%sr;   z[%s]$ rY   )r#   r&   r@   r'   rm   ÚupperrE   r(   r   Úfrom_uncr!   ÚtargetÚget_hostname_or_ipÚconnectÚsubdirsr)   Úunc_pathÚpromptÚdo_refreshcurdirr_   rW   )r-   Ú
share_namerQ   ro   rL   r/   r/   r0   Údo_use   s6   €
€ÿzSMBClient.do_usec                 Ã   s   �|   ¡ I d H S ru   )Údo_lsrv   r/   r/   r0   Údo_dir@  s   €zSMBClient.do_dirc              
   Ã   s�   �z/| j d u rtdƒ d tdƒfW S | jd u r"tdƒ d tdƒfW S | j ¡ D ]}t|ƒ q'W dS  tyG } z|  |¡W  Y d }~S d }~ww )NúNo share selected!úNo directory selected!rY   )r(   rE   r_   r)   Úget_console_outputrW   )r-   ÚentryrL   r/   r/   r0   r«   C  s   €


€ÿzSMBClient.do_lsc              
   Ã   s^   �z| j  | j¡2 z
3 d H W \}}d}q	6 W dS  ty. } z|  |¡W  Y d }~S d }~ww )Nr1   rY   )r"   Úlist_directoryr)   r_   rW   )r-   r°   ro   ÚarL   r/   r/   r0   r¨   S  s   €þ€ÿzSMBClient.do_refreshcurdirc              
   Ã   sî   �z^| j d u rtdƒ W dS | jd u rtdƒ W dS || jjvr@|dkr3| jj| _d| jj | _W dS td|| jjf ƒ W dS | jj| | _d| jj | _|  ¡ I d H \}}|d ur]|‚W dS  t	yv } z|  
|¡W  Y d }~S d }~ww )Nr­   ©FNr®   z..z[%s] $rY   z2The directory "%s" is not in parent directory "%s")r(   rE   r)   r¥   Ú
parent_dirr¦   r§   Úfullpathr¨   r_   rW   ©r-   Údirectory_namerQ   ro   rL   r/   r/   r0   Údo_cd]  s2   €


€ÿzSMBClient.do_cdc                 C   ó   | j d u rg S t| j j ¡ ƒS ru   )r)   Úlistr¥   Úkeysrv   r/   r/   r0   Úget_current_dirs{  ó   
zSMBClient.get_current_dirsc                 C   r¹   ru   )r)   rº   Úfilesr»   rv   r/   r/   r0   Úget_current_files€  r½   zSMBClient.get_current_filesr1   ÚaccessfilterÚdepthÚoutfilenamec              
   Ã   s¢  �z¸| j du rtdƒ W dS | jdu rtdƒ W dS |  d¡I dH  | ¡ }t|ƒ}d}|dur;|dkr;t|ddd�}| jj| jj	|d	d	d
�2 zn3 dH W \}}}d}|durWqG|dkrkt
 t|¡}|jdu rgqG|j}n|dkrt
 t|¡}|jdu r{qG|j}nqG|durµt|j| j| jƒ}	|	}
d|vr˜t|	|ƒ}
|
dkrµd|jt|
ƒf }|du r®t|ƒ qG| |d ¡ qG6 W dS  tyÐ } z|  |¡W  Y d}~S d}~ww )a)  Recursively enumerates all contents of a directory and checks for specific access rights
		accessfilter: can be 'r' 'w' 'x' 'a' or a combination of those. 'a' stands for all access rights
		Example: enumperms w 10 -> lists all contents the current user has write access to, up to 10 levels deep
		Nr­   r³   r®   Fr;   Úw)ÚnewlineT)rÁ   Úfetch_dir_sdÚfetch_file_sdÚfileÚdirr²   r   z%s	%sz
rY   )r(   rE   r)   rŸ   ÚlowerÚintÚopenÚlist_rr"   r!   ÚtypingÚcastr   Úsecurity_descriptorr   r   r*   r+   r   r¦   r   Úwriter_   rW   )r-   rÀ   rÁ   rÂ   Úoutfiler°   Ú	entrytypero   ÚsdÚaccessÚmatchesÚresrL   r/   r/   r0   Údo_enumperms…  s\   €

*



€å€ÿzSMBClient.do_enumpermsc              
   Ã   s¨   �z;|| j jvrtdƒ W dS | j j| }| | j¡I d H \}}|d ur&|‚t| ¡ ƒ t|| j| jƒ}td| ƒ W dS  t	yS } z|  
|¡W  Y d }~S d }~ww )Nzfile not in current directory!r³   ú
Access: %srY   )r)   r¾   rE   Úget_security_descriptorr!   Úto_sddlr   r*   r+   r_   rW   )r-   Ú	file_nameÚfile_objrÓ   ro   rÔ   rL   r/   r/   r0   Údo_getfilesd»  s"   €€ÿzSMBClient.do_getfilesdc              
   Ã   ó    �z7| j d u rtdƒ W dS | j  | j¡I d H \}}|d ur |‚tt| ¡ ƒƒ t|| j| jƒ}td| ƒ W dS  t	yO } z|  
|¡W  Y d }~S d }~ww )Nr®   r³   rØ   rY   )r)   rE   rÙ   r!   ÚstrrÚ   r   r*   r+   r_   rW   ©r-   rÓ   ro   rÔ   rL   r/   r/   r0   Údo_getdirsdÌ  ó    €
€ÿzSMBClient.do_getdirsdc              
   Ã   rÞ   )Nr­   r³   rØ   rY   )r(   rE   rÙ   r!   rß   rÚ   r   r*   r+   r_   rW   rà   r/   r/   r0   Údo_getsharesdÛ  râ   zSMBClient.do_getsharesdc                 C   ó   t | jd�S ©N©r¼   ©r   r¼   rv   r/   r/   r0   Ú_cd_completions  ó   zSMBClient._cd_completionsc                 C   rä   rå   ©r   r¿   rv   r/   r/   r0   Ú_get_completions  ré   zSMBClient._get_completionsc                 C   rä   rå   rç   rv   r/   r/   r0   Ú_getdir_completions  ré   zSMBClient._getdir_completionsc                 C   rä   rå   rê   rv   r/   r/   r0   Ú_del_completions  ré   zSMBClient._del_completionsc                 C   rä   rå   rê   rv   r/   r/   r0   Ú_sid_completions  ré   zSMBClient._sid_completionsc                 C   rä   rå   rç   rv   r/   r/   r0   Ú_dirsid_completions  ré   zSMBClient._dirsid_completionsc                    s   t ‡ fdd„d�S )Nc                      s   t ˆ j ¡ ƒS ru   )rº   r'   r»   r/   rv   r/   r0   Ú<lambda>  s    z,SMBClient._use_completions.<locals>.<lambda>ræ   r   rv   r/   rv   r0   Ú_use_completions  s   zSMBClient._use_completionsc                 C   rä   rå   rê   rv   r/   r/   r0   Ú_cat_completions  ré   zSMBClient._cat_completionsc              
   Ã   sn   �z| j  ¡ 2 z3 dH W \}}|dur|‚t| ¡ ƒ q6 W dS  ty6 } z|  |¡W  Y d}~S d}~ww )zLists remote servicesNrY   )r"   Úlist_servicesrE   Úget_stauts_liner_   rW   )r-   Úservicero   rL   r/   r/   r0   Údo_services  s   €ý€ÿzSMBClient.do_servicesc              
   Ã   sf   �z| j  |¡I dH \}}|dur|‚t| ¡ ƒ W dS  ty2 } z|  |¡W  Y d}~S d}~ww )z%Fetches service's security descriptorNrY   )r"   Úget_service_sdrE   rÚ   r_   rW   )r-   Úservice_namerÓ   ro   rL   r/   r/   r0   Údo_servicesd+  ó   €€ÿzSMBClient.do_servicesdc              
   Ã   ób   �z| j  |¡I dH \}}|dur|‚t|ƒ W dS  ty0 } z|  |¡W  Y d}~S d}~ww )zEnables a remote serviceNrY   )r"   Úenable_servicerE   r_   rW   ©r-   rø   rÖ   ro   rL   r/   r/   r0   Údo_serviceen7  ó   €€ÿzSMBClient.do_serviceenc              
   Ã   ób   �z| j  |¡I dH \}}|dur|‚tdƒ W dS  ty0 } z|  |¡W  Y d}~S d}~ww )zStarts a remote serviceNzStart command sent!rY   )r"   Ústart_servicerE   r_   rW   rý   r/   r/   r0   Údo_servicestartC  rÿ   zSMBClient.do_servicestartc              
   Ã   sf   �z| j  |||¡I dH \}}|dur|‚tdƒ W dS  ty2 } z|  |¡W  Y d}~S d}~ww )zCreates a remote serviceNzService created!rY   )r"   Úcreate_servicerE   r_   rW   )r-   rø   ÚcommandÚdisplay_namerQ   ro   rL   r/   r/   r0   Údo_servicecreateO  s   €€ÿzSMBClient.do_servicecreatec              
   Ã   r   )zDeletes a remote serviceNzService deleted!rY   )r"   Údelete_servicerE   r_   rW   )r-   rø   rQ   ro   rL   r/   r/   r0   Údo_servicedel[  rÿ   zSMBClient.do_servicedelc              
   Ã   sf   �z| j  |¡I dH \}}|dur|‚tt|ƒƒ W dS  ty2 } z|  |¡W  Y d}~S d}~ww )zGets info of a remote serviceNrY   )r"   Úget_service_configrE   rß   r_   rW   )r-   rø   rõ   ro   rL   r/   r/   r0   Údo_servicegetconfigg  rú   zSMBClient.do_servicegetconfigc              
   Ã   s¶   �zBd}|du s|dkrd}t |ƒ}| j |¡2 z'3 dH W \}}|dur&|‚|du r. W dS zt| ¡ ƒ W q   t|ƒ Y q6 W dS  tyZ } z|  |¡W  Y d}~S d}~ww )z<Executes a shell command as a service and returns the resultó    Nr;   r1   rY   )rÊ   r"   Úservice_cmd_execrE   Údecoder_   rW   ©r-   r  ÚtimeoutÚbufferÚdataro   rL   r/   r/   r0   Údo_servicecmdexecs  s,   €ü÷
€ÿzSMBClient.do_servicecmdexecc              
   Ã   s�   �z/t  |¡}d| jj ¡ | jj| jj|f }| j	j
||d�I dH \}}|dur*|‚tdƒ W dS  tyG } z|  |¡W  Y d}~S d}~ww )zMDeploys a binary file from the local system as a service on the remote systemz\\%s\%s\%s\%s)Úremote_pathNzService deployed!rY   )ÚntpathÚbasenamer!   r¢   r£   r(   rz   r)   rµ   r"   Údeploy_servicerE   r_   rW   )r-   Úpath_to_execr  r  rQ   ro   rL   r/   r/   r0   Údo_servicedeploy‰  s   €
 €ÿzSMBClient.do_servicedeployc              
   Ã   s´   �zAt  |¡}d| jj| jj|f }| j ||¡I dH \}}|dur-td| ƒ d|fW S tdƒ |  	¡ I dH \}}|dur@|‚W dS  t
yY } z|  |¡W  Y d}~S d}~ww )z"Uploads a file to the remote shareú	\%s\%s\%sNzFailed to put file! Reason: %sFzFile uploaded!rY   )r  r  r(   rz   r)   rµ   r"   Úput_filerE   r¨   r_   rW   ©r-   rÛ   r  ÚdstrQ   ro   rL   r/   r/   r0   Údo_put˜  s"   €

€ÿzSMBClient.do_putc              
   Ã   s    �z7t  |¡}d| jj| jj|f }| j |¡I dH \}}|dur#|‚tdƒ |  	¡ I dH \}}|dur6|‚W dS  t
yO } z|  |¡W  Y d}~S d}~ww )z$Removes a file from the remote sharer  NzFile deleted!rY   )r  r  r(   rz   r)   rµ   r"   Údel_filerE   r¨   r_   rW   r  r/   r/   r0   Údo_del«  s    €
€ÿzSMBClient.do_delc              
   Ã   sd   �z| j  ||¡I dH \}}|dur|‚tdƒ W dS  ty1 } z|  |¡W  Y d}~S d}~ww )ú/Saves a registry hive to a file on remote shareNzHive saved!rY   )r"   Úsave_registry_hiverE   r_   rW   )r-   Ú	hive_nameÚ	file_pathrQ   ro   rL   r/   r/   r0   Ú
do_regsave¼  s   €€ÿzSMBClient.do_regsavec              
   Ã   ój   �z| j  ¡ I dH \}}|dur|‚|D ]}t|ƒ qW dS  ty4 } z|  |¡W  Y d}~S d}~ww )r   NrY   )r"   Úreg_list_usersrE   r_   rW   )r-   Úusersro   ÚuserrL   r/   r/   r0   Údo_reglistusersÈ  s   €
€ÿzSMBClient.do_reglistusersc              
   Ã   s   �zwg }|| j jvr2t t| j j ¡ ƒ|¡D ]}| |¡ qt|ƒdkr1td|| j j	f ƒ W dS n| |¡ |D ]<}| j j| }td|j
 ƒ | j |¡2 z%3 dH W \}}|dur\|‚|du rb nzt| ¡ ƒ W qN   t|ƒ Y qN6 q9W dS  ty� } z|  |¡W  Y d}~S d}~ww )z,Prints the content of a file to the console.r   ú4File with name %s is not present in the directory %sr³   z0---------------------- %s ----------------------NrY   )r)   r¾   ÚfnmatchÚfilterrº   r»   Úappendr@   rE   rz   rµ   r"   Úget_file_datar  r_   rW   )r-   rÛ   ÚmatchedÚfnrÜ   r  ro   rL   r/   r/   r0   Údo_catÕ  s<   €þ
ø€	€ÿzSMBClient.do_catc           
   
   Ã   sl  �z�g }|| j jvr2t t| j j ¡ ƒ|¡D ]}| |¡ qt|ƒdkr1td|| j j	f ƒ W dS n| |¡ |D ]b}| j j| }t
j
d| |jdddd��E}t|d	ƒ�0}| j |¡2 z 3 d
H W \}}|d
uri|‚|d
u ro n| |¡ | t|ƒ¡ q[6 W d
  ƒ n1 s‡w   Y  W d
  ƒ n1 s–w   Y  q9W dS  tyµ }	 z|  |	¡W  Y d
}	~	S d
}	~	ww )z;Download a file from the remote share to the current folderr   r*  r³   úDownloading %sÚBTé   ©ÚdescÚtotalÚunitÚ
unit_scaleÚunit_divisorÚwbNrY   )r)   r¾   r+  r,  rº   r»   r-  r@   rE   rz   ÚtqdmÚsizerË   r"   r.  rÐ   Úupdater_   rW   )
r-   rÛ   r/  r0  rÜ   ÚpbarrÑ   r  ro   rL   r/   r/   r0   Údo_getô  sB   €þ

ú€ÿ€ÿ€
€ÿzSMBClient.do_getc                 ƒ   sâ  �dd„ }dt dtf‡ ‡fdd„‰ �zFt|ƒ}t|ƒ}|dkr!d}|dur/d	d
„ | d¡D ƒ}g }|ˆjjvr_t tˆjj 	¡ ƒ|¡D ]}| 
|¡ qCt|ƒdkr^td|ˆjjf ƒ W dS n| 
|¡ |D ]ï}d}d}	ˆjj| }
tj |
j¡t d¡ }tj|dd� tjdddddd��³}ˆ ||
ƒ2 z 3 dH W \}}|dur§|j|kr§q•|dur±|j|k r±q•|dur¾||j|ƒdu r¾q•|j|_d|_d|_t ¡ |_| ¡  |j}t|jƒdkräd|jdd…  }| d| ¡ t|dƒ�<}ˆj |¡2 z,3 dH W \}}|du�r n|du �r|d7 } n|  |¡ | !t|ƒ¡ |	t|ƒ7 }	q÷6 W d  ƒ n	1 �s0w   Y  q•6 | ¡  W d  ƒ n	1 �sFw   Y  td|t"|	ƒf ƒ qfW dS  t#�yp } zˆ $|¡W  Y d}~S d}~ww )a0  Download a directory recirsively from the current location on the remote machine to the current local folder.
		Minfsize and maxfsize are in bytes or in 1G 1M 1k notation. Filenamefilter is a comma separated list of fnmatch patterns (eg. *.exe,*.dll)
		In case you want to specify the parameters partially, you can use the following notation:
		getdir <dir_name> '' '1M' '*.exe,*.dll' -> only maxfsize and filenamefilter will be used
		getdir <dir_name> -> all files will be downloaded
		getdir <dir_name> '1M' -> all files bigger than 1M will be downloaded
		c                 S   s    |D ]}t   | |¡r dS qdS )zñ
			Check if the filename matches any of the provided patterns.
			
			:param filename: The name of the file.
			:param patterns: A list of patterns to match against.
			:return: True if the filename matches any pattern, otherwise False.
			TF)r+  )ÚfilenameÚpatternsÚpatternr/   r/   r0   Úmatches_any_pattern  s
   ÿz0SMBClient.do_getdir.<locals>.matches_any_patternÚout_pathÚdir_objc                   s¶   �|j ˆjddd�2 zM3 d H W \}}}|d urq
|dkrCtj | t |j¡¡}tj|dd� ˆ ||ƒ2 z3 d H W \}}||fV  q36 q
|dkrWtj | tj 	|j¡¡|fV  q
q
6 d S )Nr1   r8   )rÁ   Ú
maxentriesrÈ   T©Úexist_okrÇ   )
rÌ   r!   ÚosÚpathrF   r  Únormpathrz   Úmakedirsr  )rE  rF  ÚobjÚotypero   ÚdirpathÚlfiler°   ©Úget_directoryr-   r/   r0   rS  (  s   €$ÿ ôz*SMBClient.do_getdir.<locals>.get_directoryr;   Nc                 S   s   g | ]}|  ¡ ‘qS r/   )Ústrip)r2   Úxr/   r/   r0   Ú
<listcomp>=  s    z'SMBClient.do_getdir.<locals>.<listcomp>ú,r   z9Directory with name %s is not present in the directory %sr³   z%Y%m%d_%H%M%STrH  zDownloading files...r3  r4  r5  Fé   z...iâÿÿÿr2  r;  r1   z"Donwloaded %s files, total size %srY   )%rß   r   r   Úsplitr)   r¥   r+  r,  rº   r»   r-  r@   rE   rz   rJ  rK  r  ÚtimeÚstrftimerM  r<  r=  r7  ÚnÚlast_print_nÚstart_tÚrefreshr¦   Úset_descriptionrË   r"   r.  rÐ   r>  r   r_   rW   )r-   Údir_nameÚminfsizeÚmaxfsizeÚfilenamefilterrD  r/  r0  Útotal_filesÚ
total_sizerF  Úbasedirnamer?  rQ  r°   r6  rÑ   r  ro   rL   r/   rR  r0   Ú	do_getdir  s‚   €þ




ø€ÿ€ï
ä€ÿzSMBClient.do_getdirc              
   Ã   s„   �z)| j  || j¡I dH \}}|dur|‚tdƒ |  ¡ I dH \}}|dur(|‚W dS  tyA } z|  |¡W  Y d}~S d}~ww )z'Creates a directory on the remote shareNzDirectory created!rY   )r"   Úcreate_subdirectoryr)   rE   r¨   r_   rW   r¶   r/   r/   r0   Údo_mkdirs  s   €€ÿzSMBClient.do_mkdirc              
   Ã   s’   �z0g }|dur|  |¡ | jj|d�2 z3 dH W \}}|dur"|‚|du r'qtt|ƒƒ q6 W dS  tyH } z|  |¡W  Y d}~S d}~ww )z*It's a suprse tool that will help us laterN)Útarget_usersrY   )r-  r"   ÚdcsyncrE   rß   r_   rW   )r-   r€   r'  Úsecretro   rL   r/   r/   r0   Ú	do_dcsync‚  s"   €
û€ÿzSMBClient.do_dcsyncc              
   Ã   s~   �z&| j  |¡2 z3 dH W \}}}|durtt|ƒƒ td||f ƒ q6 W dS  ty> } z|  |¡W  Y d}~S d}~ww )zList users in domainNú%s %srY   )r"   Úlist_domain_usersrE   rß   r_   rW   )r-   rˆ   r€   Úuser_sidro   rL   r/   r/   r0   Údo_users”  s   €ý€ÿzSMBClient.do_usersc           	   
   Ã   s–  �d }z¯z~|d u rdt j  ¡  d¡ }| j ¡ I d H \}}|d ur#|‚tjd|jdddd�}t|dƒ�+}	 | d	¡I d H \}}|d urE|‚|d
krJn| 	|¡ | 
t|ƒ¡ q5W d   ƒ n1 saw   Y  W W |d ur�| ¡ I d H  | j |j¡I d H \}}dS dS  ty² } z$|  |¡W  Y d }~W |d ur­| ¡ I d H  | j |j¡I d H \}}S S d }~ww |d urÊ| ¡ I d H  | j |j¡I d H \}}w )Nzlsass_%s.dmpz%Y_%m_%d_%H%M%SzDownloading lsass dumpr3  Tr4  r5  r;  iÿÿ  r  rY   )ÚdatetimeÚnowr[  r"   Útask_dump_lsassr<  r=  rË   ÚreadrÐ   r>  r@   rq   r  rµ   r_   rW   )	r-   Ú	lfilepathÚ	lsassfilero   r?  Úfr  rQ   rL   r/   r/   r0   Údo_lsass¡  sJ   €
ùú
þýþ€ýzSMBClient.do_lsassc              
   Ã   sj   �z| j  |¡I dH \}}|durtt|ƒƒ t|ƒ W dS  ty4 } z|  |¡W  Y d}~S d}~ww )Ú
PrinterbugNrY   )r"   Ú
printerbugrE   rß   r_   rW   )r-   Úattacker_iprÖ   ro   rL   r/   r/   r0   Údo_printerbug½  s   €€ÿzSMBClient.do_printerbugc              
   Ã   sj   �z| j  ¡ 2 z3 dH W \}}|dur|‚t|ƒ q6 W dS  ty4 } z|  |¡W  Y d}~S d}~ww )zList scheduled tasks NrY   )r"   Ú
tasks_listrE   r_   rW   )r-   Útasknamero   rL   r/   r/   r0   Údo_tasksÊ  s   €
ý€ÿzSMBClient.do_tasksc              
   Ã   rû   )z Gets the XML of a scheduled taskNrY   )r"   Úget_taskrE   r_   rW   )r-   Ú	task_nameÚxmlro   rL   r/   r/   r0   Ú
do_taskxml×  s   €€ÿzSMBClient.do_taskxmlú\c              
   Ã   sl   �z| j  |¡2 z3 dH W \}}|dur|‚t|ƒ q6 W dS  ty5 } z|  |¡W  Y d}~S d}~ww )zLists scheduled task foldersNrY   )r"   Úlist_task_foldersrE   r_   rW   )r-   rK  Úfolderro   rL   r/   r/   r0   Údo_tasklistfoldersä  s   €
ý€ÿzSMBClient.do_tasklistfoldersc              
   Ã   sš   �z4t |dƒ�}| ¡ }W d  ƒ n1 sw   Y  | jj||d�I dH \}}|dur3t d¡ |‚W dS  tyL } z|  |¡W  Y d}~S d}~ww )zRegisters a new scheduled taskÚrN)rƒ  z [!] Failed to register new task!rY   )rË   rv  r"   Útasks_registerr   Úinfor_   rW   )r-   Útemplate_filerƒ  ry  ÚtemplaterÖ   ro   rL   r/   r/   r0   Údo_taskregisterñ  s   €
ÿ
€ÿzSMBClient.do_taskregisterc              
   Ã   sZ   �z| j  |¡I dH \}}|dur|‚W dS  ty, } z|  |¡W  Y d}~S d}~ww )zDeletes a scheduled task	NrY   )r"   Útasks_deleter_   rW   )r-   rƒ  rQ   ro   rL   r/   r/   r0   Ú
do_taskdel  s   €€ÿzSMBClient.do_taskdelc              
   Ã   s¸   �zCd}|du s|dkrd}t |ƒ}| j ||¡2 z'3 dH W \}}|dur'|‚|du r/ W dS zt| ¡ ƒ W q   t|ƒ Y q6 W dS  ty[ } z|  |¡W  Y d}~S d}~ww )z; Executes a shell command using the scheduled tasks servicer  Nr;   r1   rY   )rÊ   r"   Útasks_cmd_execrE   r  r_   rW   r  r/   r/   r0   Údo_taskcmdexec  s,   €ü÷
€ÿzSMBClient.do_taskcmdexecc              
   Ã   sz   �z$| j  ¡ I dH \}}|dur|‚|D ]}td|d |d f ƒ qW dS  ty< } z|  |¡W  Y d}~S d}~ww )z4 Lists all network interfaces of the remote machine Nz%d: %sÚindexÚaddressrY   )r"   Úlist_interfacesrE   r_   rW   )r-   Ú
interfacesro   ÚifacerL   r/   r/   r0   Údo_interfaces%  s   €€ÿzSMBClient.do_interfacesr:   c              
   Ã   s*  �z|t |ƒ}| jj|d�2 zl3 dH W \}}}|dur0|dv r(td||jf ƒ ntd||f ƒ |dkrIt t|¡}td|j|j|j	|j
f ƒ q|dkrat t|¡}td|jd	|j	|j
f ƒ q|d
krst t|¡}td|j ƒ qtd| ƒ q6 W dS  ty” } z|  |¡W  Y d}~S d}~ww )ú= Enumerates all shares for all files and folders recursively ©rÁ   N)rÈ   rÇ   z	[E] %s %srÇ   z[F] %s %s %s %srÈ   z[D] %s %s %s %sÚ0r|   z[S] %sz[?] %srY   )rÊ   r"   Úenum_all_recursivelyrE   r¦   rÍ   rÎ   r   r=  Úlast_access_timeÚlast_write_timer   r   rz   r_   rW   )r-   rÁ   rN  rO  ro   rL   r/   r/   r0   Ú
do_enumall3  s0   € ï€ÿzSMBClient.do_enumallc              
   Ã   r%  )rš  NrY   )r"   Úenum_printer_driversrE   r_   rW   )r-   Údriversro   ÚdriverrL   r/   r/   r0   Údo_printerenumdriversO  s   €
€ÿzSMBClient.do_printerenumdriversr;   c              
   Ã   ól   �zt |ƒdkr
d}| j ||¡I dH \}}|dur|‚W dS  ty5 } z|  |¡W  Y d}~S d}~ww )z, printnightmare bug using the RPRN protocol r   NrY   )r@   r"   Úprintnightmarer_   rW   ©r-   r|   Ú
driverpathrQ   ro   rL   r/   r/   r0   Údo_printnightmare[  ó   €€ÿzSMBClient.do_printnightmarec              
   Ã   r¥  )z+ printnightmare bug using the PAR protocol r   NrY   )r@   r"   Úpar_printnightmarer_   rW   r§  r/   r/   r0   Údo_parprintnightmareg  rª  zSMBClient.do_parprintnightmarec              
   Ã   s.  �zý| j  ¡ I dH \}}|dur|‚|D ]ç}|du s t|ƒdkr&td| ƒ d|| v rf|du s6t|ƒdkrCtd|| d  ¡  ƒ n#td||df dƒ�}| || d ¡ W d  ƒ n1 saw   Y  d|| v r©|du svt|ƒdkr…td	|| d  ¡  ¡  ƒ n$td
||f dƒ�}| || d  ¡ ¡ W d  ƒ n1 s¤w   Y  d|| v rè|du s¹t|ƒdkrÆtd|| d  ¡  ƒ n"td||f dƒ�}| || d ¡ W d  ƒ n1 sãw   Y  |du sòt|ƒdkr÷tdƒ qtdƒ qW dS  t�y } z|  	|¡W  Y d}~S d}~ww )z$Obtains the DPAPI domain backup keysNr   zGUID: %sÚ	legacykeyzLegacy key: 0x%sz%s_%s_%s.keyr;  ÚpvkzPVK: %sz	%s_%s.pvkÚcertificatezCertificate: 
%sz	%s_%s.derr;   zBackupkey saved to diskrY   )
r"   Úget_backupkeysr@   rE   ÚhexrË   rÐ   Úto_bytesr_   rW   )r-   rÑ   Ú
backupkeysro   Úguidry  rL   r/   r/   r0   Údo_backupkeyss  sD   €ÿÿÿ

€ÿzSMBClient.do_backupkeysc              
   Ã   s¬   �z=| j jdd�2 z-3 dH W \}}}}}|dur|‚td| ƒ td| ƒ td| ƒ td| ƒ tdƒ q	6 td	ƒ W d
S  tyU } z|  |¡W  Y d}~S d}~ww )z#Searches for cpassword in GPP filesé   r›  NzFilename: %srš   zCpassword: %szType: %sr;   zDone!rY   )r"   Úget_cpasswdrE   r_   rW   )r-   rA  r€   Ú	cpasswordÚxmltypero   rL   r/   r/   r0   Ú
do_cpasswd–  s"   €$
ù€ÿzSMBClient.do_cpasswdÚserver_namec              
   Ã   sj   �z| j j||d�I d H \}}|d ur|‚td| ƒ W dS  ty4 } z|  |¡W  Y d }~S d }~ww )N©r»  zJob added! Job ID: %srY   )r"   Ú
at_add_jobrE   r_   rW   )r-   Úatinfor»  Újobidro   rL   r/   r/   r0   Údo_ataddjob§  s   €€ÿzSMBClient.do_ataddjobc              
   Ã   sd   �z| j j|d�I d H \}}|d ur|‚t|ƒ W dS  ty1 } z|  |¡W  Y d }~S d }~ww ©Nr¼  rY   )r"   Úat_enumrE   r_   rW   )r-   r»  rU  ro   rL   r/   r/   r0   Ú	do_atenum±  s   €€ÿzSMBClient.do_atenumr¿  c              
   Ã   sn   �zt |ƒ}| jj||d�I d H \}}|d ur|‚tdƒ W dS  ty6 } z|  |¡W  Y d }~S d }~ww )Nr¼  zJob deleted!rY   )rÊ   r"   Ú
at_del_jobrE   r_   rW   )r-   r¿  r»  rQ   ro   rL   r/   r/   r0   Údo_atdeljob»  s   €€ÿzSMBClient.do_atdeljobc              
   Ã   sn   �zt |ƒ}| jj||d�I d H \}}|d ur|‚t|ƒ W dS  ty6 } z|  |¡W  Y d }~S d }~ww rÁ  )rÊ   r"   Úat_get_inforE   r_   rW   )r-   r¿  r»  Újobinforo   rL   r/   r/   r0   Údo_atgetjobÇ  s   €€ÿzSMBClient.do_atgetjobc              
   Ã   sv   �z"| j  ¡ 2 z3 d H W \}}}|d ur|‚td|j|f ƒ q6 W dS  ty: } z|  |¡W  Y d }~S d }~ww )Nro  rY   )r"   Úshare_write_testrE   rz   r_   rW   )r-   r|   Úwritablero   rL   r/   r/   r0   Údo_sharewritetestÒ  s   €ý€ÿzSMBClient.do_sharewritetestc              
   Ã   s¼   �zE| j du r| jdu rtdƒ W dS | j du r'| jj| j|d�I dH \}}n| j j| j|d�I dH \}}|dur;|‚|D ]}t|ƒ q=W dS  ty] } z|  |¡W  Y d}~S d}~ww )z+ Lists all snapshots of the remote machine Nz"Select a share or directory first!r³   )rK  rY   )r)   r(   rE   Ú	snapshotsr!   r_   rW   )r-   rK  rÌ  ro   ÚsnapshotrL   r/   r/   r0   Údo_snapshotsÜ  s"   €

€ÿzSMBClient.do_snapshotsrˆ   c              
   Ã   sz   �z$|dks
|du rd}| j  |||¡I dH \}}|dur|‚tdƒ W dS  ty< } z|  |¡W  Y d}~S d}~ww )zbCreates a new user in the given domain. If domain is not set, it will default to the local machiner;   Nr•   zUser added OK!rY   )r"   Úadd_new_userrE   r_   rW   ©r-   r€   Úpasswordrˆ   rQ   ro   rL   r/   r/   r0   Údo_usercreateð  s   €€ÿzSMBClient.do_usercreatec              
   Ã   óx   �z#|dks
|d u rd}| j  ||¡I d H \}}|d ur|‚tdƒ W dS  ty; } z|  |¡W  Y d }~S d }~ww )Nr;   r•   zUser removed OK!rY   )r"   Údelete_userrE   r_   rW   ©r-   r€   rˆ   rQ   ro   rL   r/   r/   r0   Ú
do_userdelÿ  ó   €€ÿzSMBClient.do_userdelc              
   Ã   rÓ  )Nr;   r•   zUser enabled OK!rY   )r"   Úenable_userrE   r_   rW   rÕ  r/   r/   r0   Údo_userenable  r×  zSMBClient.do_userenablec              
   Ã   rÓ  )Nr;   r•   zUser disabled OK!rY   )r"   Údisable_userrE   r_   rW   rÕ  r/   r/   r0   Údo_userdisable  r×  zSMBClient.do_userdisablec              
   Ã   ó|   �z%|dks
|d u rd}| j  ||||¡I d H \}}|d ur |‚tdƒ W dS  ty= } z|  |¡W  Y d }~S d }~ww ©Nr;   r•   zUser pw changed OK!rY   )r"   Úchange_user_passwordrE   r_   rW   )r-   r€   ÚoldpasswordrÑ  rˆ   rQ   ro   rL   r/   r/   r0   Údo_userchangepw)  ó   €€ÿzSMBClient.do_userchangepwc              
   Ã   rÜ  rÝ  )r"   Úchange_user_password_ntrE   r_   rW   )r-   r€   ÚoldhashrÑ  rˆ   rQ   ro   rL   r/   r/   r0   Údo_userchangepwhash7  rá  zSMBClient.do_userchangepwhashc              
   Ã   óz   �z$|dks
|d u rd}| j  |||¡I d H \}}|d ur|‚tdƒ W dS  ty< } z|  |¡W  Y d }~S d }~ww rÝ  )r"   Úchange_user_password_newrE   r_   rW   rÐ  r/   r/   r0   Údo_userchangepw4E  ó   €€ÿzSMBClient.do_userchangepw4c              
   Ã   rå  rÝ  )r"   Úchange_user_password_internalrE   r_   rW   rÐ  r/   r/   r0   Údo_userchangepwinternalS  rè  z!SMBClient.do_userchangepwinternalÚwith_sidc              
   Ã   s¶   �zB|du s|dkst |ƒ ¡ dkrd}nd}| j |¡2 z"3 d H W \}}}}|d ur-|‚|du r;t|› d|› �ƒ qt|ƒ q6 W dS  tyZ } z|  |¡W  Y d }~S d }~ww )NTÚ1ÚTRUEFz : rY   )rß   r    r"   Úlist_users_allowed_to_replicaterE   r_   rW   )r-   rˆ   rë  rz   r‹   Úridro   rL   r/   r/   r0   Údo_rodcallowertoreplicatea  s"   €  
ù	€ÿz#SMBClient.do_rodcallowertoreplicateúHELLO!c              
   Ã   s  �dd„ }d}zwzRt  d| jj ¡ df ¡}| | jd¡I dH \}}|dur(|‚t d¡}| |¡I dH \}}|dur=|‚	 | 	d	¡I dH \}}|durN|‚t
|ƒ t d
¡I dH  q> ty~ } z|  |¡W  Y d}~W |dury| ¡ I dH  S S d}~ww |dur‹| ¡ I dH  w w )z
 pipetest c                 Ó   s~   �z3t  d¡I d H  d d¡}t|ƒjdddd�| }	 |  |¡I d H \}}|d ur,|‚t  d	¡I d H  q   t ¡  Y d S )
Nr¶  z
HELLO!!!
zutf-8é   ÚlittleF)Ú	byteorderÚsignedTr1   )ÚasyncioÚsleepÚencoder@   r²  rÐ   rG   r`   )Úpiper  rQ   ro   r/   r/   r0   Útempw  s   €
üz#SMBClient.do_pipetest.<locals>.tempNz\\%s\IPC$\%sÚtestpipeÚrwÚD00000022000570b75f7cf1897fd2a679b70e9a46d5475443500004acd9a84e005001Trò  é   )r   Úfrom_uncpathr!   r¢   r£   Ú	open_pipeÚbytesÚfromhexrÐ   rv  rE   rö  r÷  rq   r_   rW   )r-   r  rú  rù  rQ   ro   rL   r/   r/   r0   Údo_pipetestu  s:   €
ûÿ€ýÿzSMBClient.do_pipetest)NFFFru   )T)r1   N)r1   )NNN)r†  )r:   )r;   )F)rñ  )\Ú__name__Ú
__module__Ú__qualname__r   rW   re   rp   rt   rw   rx   rm   r„   r†   r‰   rŒ   r�   r”   r–   r™   rŸ   rª   r¬   r«   r¨   r¸   r¼   r¿   rß   rÊ   r×   rÝ   rá   rã   rè   rë   rì   rí   rî   rï   rñ   rò   rö   rù   rþ   r  r  r  r
  r  r  r  r  r$  r)  r1  r@  rh  rj  rn  rr  rz  r~  r�  r…  r‰  r�  r‘  r“  r™  r   r¤  r©  r¬  rµ  rº  rÀ  rÃ  rÅ  rÈ  rË  rÎ  rÒ  rÖ  rÙ  rÛ  rà  rä  rç  rê  Úboolrð  r  r/   r/   r/   r0   r   $   s®    

-







 
6*


a









#










r   FÚsmb_urlÚcommandsr$   Úcontinue_on_errorÚno_interactiver%   c                 Ã   sV  �t | ||d�}t|ƒdkr8|du rtdƒ t d¡ | dg ¡I d H \}}|d ur/t d¡ | ¡ I d H  d S zj|D ]X}	|	dkrM| ¡ I d H  t d¡ t |	¡}
|
d dkrk| 	¡ I d H \}}|d urjt d¡ q;td|	 ƒ | |
d |
dd … ¡I d H \}}|d ur“|d	u r“td
ƒ t d¡ q;t d¡ W | 
¡ I d H  d S | 
¡ I d H  w )N)r$   r%   r   TzNot starting interactive!r1   rj   Úiz>>> %sFz8Batch execution stopped early, because a command failed!)r   r@   rE   ÚsysÚexitÚ_run_single_commandÚrunÚshlexrY  rp   rt   )r  r	  r$   r
  r  r%   ÚclientrQ   ro   r  Úcmdr/   r/   r0   Úamain¢  s:   €




"
€"r  c               	   C   sh  dd l } dd l}dd l}ddlm} ddlm} | jdd�}|jddddd� |jd	d
ddd� |jdddd� |jddddd� |jdddd� |jddd� |jddd� | ¡ }|j	du rdt
tƒ |jdkrut |j¡ | |j¡ |jdkr t
dƒ t d¡ t d¡ | d¡ | d¡ t ¡  d ¡ |j|jd!� t t|j|j|j	|j|j|jƒ¡ d S )"Nr   r   zInteractive SMB client)Údescriptionz-vz	--verboseÚcount)ÚactionÚdefaultz-sz--silentÚ
store_truezdo not print banner)r  Úhelpz-nz--no-interactive)r  z-cz--continue-on-errorzDWhen in batch execution mode, execute all commands even if one failsz--nosigzDisable SMB signing (SMB2 only)r  zƒConnection string that describes the authentication and target. Example: smb+ntlm-password://TEST\Administrator:password@10.10.10.2)r  r	  r   )ÚnargsFr1   rþ  zsetting deepdebugT)Úlevel)ÚargparseÚplatformÚloggingÚasysocksr   ÚasyauthÚArgumentParserÚadd_argumentÚ
parse_argsr$   rE   r	   ÚverboseÚsetLevelÚDEBUGÚsocksloggerrö  Úget_event_loopÚ	set_debugÚbasicConfigr  r  r  r	  r
  r  r%   )r  r  r  Ú	asyloggerÚasyauthloggerÚparserrP   r/   r/   r0   ÚmainÃ  sJ   






úÿr/  Ú__main__)9r  rJ  rö  rG   r  r+  rs  rZ  r  r<  r<   rÍ   r   r   Úaiosmb.external.aiocmd.aiocmdr   Ú aiosmb.examples.smbpathcompleterr   Úaiosmbr   rZ   r	   Ú!aiosmb.commons.connection.factoryr
   Úaiosmb.connectionr   Ú!aiosmb.commons.interfaces.machiner   Úaiosmb.commons.interfaces.sharer   Úaiosmb.commons.interfaces.filer   Ú#aiosmb.commons.interfaces.directoryr   Úaiosmb.commons.exceptionsr   Úaiosmb.dcerpc.v5.rpcrtr   Úaiosmb.commons.utils.fmtsizer   r   r   r(  Úaiosmb.commons.utils.faccessr   r   r   r   Úaiosmb.wintypes.access_maskÚaiosmb.protocol.smb2.commandsr   r   rß   r  r  r/  r  r/   r/   r/   r0   Ú<module>   s^               2	!,
ÿ