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rd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 )zCreates 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 )zBuilds 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=almazsmb://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.8zsmb://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