o
    Žõ±j¬   ã                   @   s’  d dl 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
Z
d dlZd dlmZ d dlmZ d dlmZ d d	lmZ G d
d„ dƒZedkrÅdZdZdZdZdZdZdZdZe eeeeeee¡Zd dlmZ g d¢Z e D ]VZ!e"dƒ e"e!ƒ ze #e!¡Z$e$ %¡ Z&e$ '¡ Z(e$ )¡ Z*e"e*ƒ W n# e+y´ Z, zd dl-Z-e- .¡  e"de, ƒ e/ƒ  W Y dZ,[,qpdZ,[,ww e"e0e&ƒƒ e"e0e(ƒƒ e/ƒ  qpdS dS )é    N)ÚSMBFile)ÚSMBDirectory)Ú	SMBTargetÚSMBConnectionDialect)ÚSMBConnection)ÚList)ÚUniCredential)ÚasyauthSecret)ÚSPNEGOCredentialc                   @   s  e Zd Zd7dedefdd„Zed8dd„ƒZed	d
„ ƒZede	fdd„ƒZ
d9defdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zed dd!d"ddd#ddg d$¢ddfd%ed&ed'ed(ed)ed*ed+ed,ed-ed.ed/ed0ee d1ed2efd3d4„ƒZd5d6„ ZdS ):ÚSMBConnectionFactoryNÚ
credentialÚtargetc                 C   s   || _ || _d | _d S )N)r   r   Úproxies)Úselfr   r   © r   ú”/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/commons/connection/factory.pyÚ__init__   s   
zSMBConnectionFactory.__init__ÚNTLMc                 C   s@   	 t  |¡}| dkrddlm} | ¡ }ntd|  ƒ‚t||ƒS )zLCreates a new SMBConnectionFactory object with a dummy target and credentialr   r   ©ÚNTLMCredentialzUnknown authtype: %s)r   Úcreate_dummyÚasyauth.common.credentials.ntlmr   Úcreate_guestÚ	Exceptionr   )Úauthtyper   r   r   r   r   r   r   r      s   


z!SMBConnectionFactory.create_dummyc                 C   s   t  | ¡}t | ¡}t||ƒS )z,Creates SMBConnectionFactory from url string)r   Úfrom_urlr   r   )Úconnection_urlr   r   r   r   r   r       s   


zSMBConnectionFactory.from_urlÚsmbconnectionc                 C   s   	 t | j ¡ t | j¡ƒS )zOCreates a new SMBConnectionFactory object from an existing SMBConnection object)r   ÚgssapiÚget_copyÚcopyÚdeepcopyr   )r   r   r   r   Úfrom_smbconnection'   s   z'SMBConnectionFactory.from_smbconnectionFÚnosignc                 C   s*   |   ¡ }|  ¡ }|du rd}t|||d�S )z"Creates a new SMBConnection objectNF)r#   )Úget_credentialÚ
get_targetr   )r   r#   Úspnegr   r   r   r   Úget_connection-   s
   z#SMBConnectionFactory.get_connectionc                 C   sJ   |   ¡ }|  ¡ }zt |¡ ||_d|_W n
   ||_||_Y t||ƒS )zÜCreates a new SMBConnection object with a new target. 
		Credentials are copied from the original connection factory
		Target parameters will remain the same as the original, 
		but is set to the ip_or_hostname parameterN)r$   r%   Ú	ipaddressÚ
ip_addressÚipÚhostnamer   )r   Úip_or_hostnamer&   r   r   r   r   Úcreate_connection_newtarget6   s   


z0SMBConnectionFactory.create_connection_newtargetc                 C   ó   t  |  ¡ ¡S )zUCreates a new SMBFile object using the path from the URL string, or the Target object)r   Úfrom_smbtargetr%   ©r   r   r   r   Úget_fileI   ó   zSMBConnectionFactory.get_filec                 C   r.   )zZCreates a new SMBDirectory object using the path from the URL string, or the Target object)r   r/   r%   r0   r   r   r   Úget_directoryM   r2   z"SMBConnectionFactory.get_directoryc                 C   s   t  | jj¡S )z0Returns a copy of proxies from the target object)r    r!   r   r   r0   r   r   r   Úget_proxiesQ   r2   z SMBConnectionFactory.get_proxiesc                 C   s   t  | j¡S )z#Returns a copy of the target object)r    r!   r   r0   r   r   r   r%   U   s   zSMBConnectionFactory.get_targetc                 C   s   t t | j¡gƒ ¡ S )zJReturns a new SPNEGOCredential object with the credential from the factory)r
   r    r!   r   Úbuild_contextr0   r   r   r   r$   Y   s   z#SMBConnectionFactory.get_credentialc              
   Ã   s®   �d }z<|   ¡ }|4 I d H š$ | ¡ I d H \}}| ¡ }|d ur"|‚d|d fW  d   ƒI d H  W S 1 I d H s8w   Y  W d S  tyV } zd||fW  Y d }~S d }~ww )NTF)r'   ÚloginÚget_extra_infor   )r   Ú	ntlm_dataÚ
connectionÚ_ÚerrÚer   r   r   Útest_connection]   s   €4ú€ÿz$SMBConnectionFactory.test_connectionÚpasswordé½  ÚsmbÚntlm©é   é   é   r,   ÚusernameÚsecretÚ
secrettypeÚdomainÚportÚdialectÚdcipÚ	authprotoÚaltnameÚ	altdomainÚetypeÚcertdataÚkeydatac                 C   s  ddl }| d¡dkr| d¡\}}|dur| ¡ }d}d}z| | ¡ | }d}W n   d}| }Y t|||||t |¡d�}| t	| ¡ ƒ¡ |	 ¡ }	t
| ¡ ƒ}|	dkrdddlm} |||||ƒ}n!|	dkrdd	lm} |||||||
|g d
¢||d�
}ntd|	 ƒ‚t||ƒS )zºBuilds a new SMBConnectionFactory object from scratch.
		This doesn't support all features of the SMBTarget and SMBCredential objects, but it's a quick way to build a connection factory.r   Nú\é   )Údc_iprI   r   r   r   ÚKERBEROS)ÚKerberosCredentialrB   )r   rN   rO   rP   rQ   rR   zUnknown authproto: %s)r(   ÚcountÚsplitÚupperr)   r   r    r!   Úupdate_dialectr   r	   r   r   Ú#asyauth.common.credentials.kerberosrW   r   r   )r,   rF   rG   rH   rI   rJ   rK   rL   r   rM   rN   rO   rP   rQ   rR   r(   r*   r+   r   r   r   rW   r   r   r   Úfrom_componentsk   sT   
üö
z$SMBConnectionFactory.from_componentsc                 C   sV   d}| j D ]#}| j | }t|tjƒr|}n	t|tjƒr|j}|d|t|ƒf 7 }q|S )Nz ==== SMBConnectionFactory ====
z%s: %s
)Ú__dict__Ú
isinstanceÚenumÚIntFlagÚEnumÚnameÚstr)r   ÚtÚkÚvalr   r   r   Ú__str__¤   s   

zSMBConnectionFactory.__str__)NN)r   N)F)Ú__name__Ú
__module__Ú__qualname__r   r   r   Ústaticmethodr   r   r   r"   Úboolr'   r-   r1   r3   r4   r%   r$   r=   rd   r   Úintr]   rh   r   r   r   r   r      sT    
	þÿÿÿÿÿþþþþþ8r   Ú__main__zTEST\victimz
Passw0rd!1ÚTESTz
10.10.10.2r?   r@   r>   rA   )zsmb://10.10.10.2zsmb://10.10.10.2:9000zsmb3://10.10.10.2:9000zsmb-tcp://10.10.10.2zsmb-tcp://10.10.10.2:9000zsmb-udp://10.10.10.2:138z*smb+ntlm-password://domain\user@10.10.10.2z7smb-tcp+ntlm-password://domain\user:password@10.10.10.2z=smb-tcp+ntlm-password://domain\user:password@10.10.10.2:10000z-smb-tcp+ntlm-nt://domain\user:alma@10.10.10.2ú)smb+ntlm-nt://domain\user:alma@10.10.10.2rq   z>smb-tcp+kerberos-password://domain\alma:password@10.10.10.10.2zQsmb-tcp+kerberos-aes://domain\alma:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@10.10.10.10.2zqsmb-tcp+kerberos-aes://domain\alma:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@10.10.10.10.2zPsmb-tcp+kerberos-nt://domain\alma:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@10.10.10.10.2zQsmb-tcp+kerberos-rc4://domain\alma:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@10.10.10.10.2zsmb+sspi-ntlm://10.10.10.10.2z!smb+sspi-kerberos://10.10.10.10.2zsmb://10.10.10.2/?timeout=10z*smb://10.10.10.2/?timeout=10&dc=10.10.10.2z;smb://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=socks5zOsmb://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=socks5&proxyhost=127.0.0.1znsmb://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=socks5&proxyhost=127.0.0.1&proxyuser=admin&proxypass=almazˆsmb://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=socks5&proxyhost=127.0.0.1&proxyuser=admin&proxypass=alma&dc=10.10.10.2&dns=8.8.8.8z‰smb://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=socks5s&proxyhost=127.0.0.1&proxyuser=admin&proxypass=alma&dc=10.10.10.2&dns=8.8.8.8zK===========================================================================zERROR! Reason: %s)1r`   Úaiosmb.commons.interfaces.filer   Ú#aiosmb.commons.interfaces.directoryr   Ú aiosmb.commons.connection.targetr   r   Úaiosmb.connectionr   r(   r    Útypingr   Úasyauth.common.credentialsr   Úasyauth.common.constantsr	   Ú!asyauth.common.credentials.spnegor
   r   ri   Úuserr>   rI   r*   rJ   rK   rH   rM   r]   ÚfactoryÚ	url_testsÚurlÚprintr   Údecr$   Úcredsr%   r   r1   Úsmbfiler   r<   Ú	tracebackÚ	print_excÚinputrd   r   r   r   r   Ú<module>   sl     $ù

€ü½2