o
    Žõ±j0  ã                   @   sÜ   d dl mZmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlT d dlmZ d dlmZ d dlmZ d d	lmZ d d
lZd d
lZdd„ ZG dd„ dƒZG dd„ dƒZdd„ Zdd„ Zedkrle eƒ ¡ d
S d
S )é    )Ú	UniTargetÚUniProto)Ú	UniServer)ÚNetBIOSPacketizer)ÚNEGOTIATE_REQÚNEGOTIATE_REPLYÚNegotiateSecurityModeÚNegotiateCapabilitiesÚNegotiateDialects)Ú*)ÚSMBServerConnection©Úspnegoserver_ntlm_factory©Úntlmserver_factory)ÚNTLMCredentialNc                 Ã   s   �t | ƒ d S ©N)Úprint)Úmsg© r   ú‡/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/server/server.pyÚlog_callback   s   €r   c                   @   s    e Zd Zefdd„Zdd„ ZdS )ÚSMBServerSettingsc                 C   sB   || _ tjg| _d| _d| _d| _t ¡ | _	d| _
|| _i | _d S )Né   F)Úgssapi_factoryr
   ÚSMB202Úpreferred_dialectsÚMaxTransactSizeÚMaxReadSizeÚMaxWriteSizeÚGUIDÚrandomÚ
ServerGuidÚRequireSigningr   Úshares)Úselfr   r   r   r   r   Ú__init__   s   


zSMBServerSettings.__init__c                 C   s   |   ¡ }| |¡ |S r   )r   Úset_connection_info)r%   Ú
connectionÚgssapir   r   r   Úcreate_new_gssapi   s   
z#SMBServerSettings.create_new_gssapiN)Ú__name__Ú
__module__Ú__qualname__r   r&   r*   r   r   r   r   r      s    r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú	SMBServerc                 C   s(   || _ || _d | _d | _i | _d| _d S )Nr   )ÚtargetÚsettingsÚserverÚserving_taskÚconnectionsÚconnection_ctr)r%   r/   r0   r   r   r   r&   $   s   
zSMBServer.__init__c                 Ã   s(   �| j jd ur| j  |¡I d H  d S d S r   )r0   r   )r%   r   r   r   r   r   ,   s   €ÿzSMBServer.printc              
   Ã   s’  �zµzn|  j d7  _ |  d| j  ¡I d H  z:t| j|| j d�}| jj| jvr-g | j| jj< | j| jj  |¡ | ¡ I d H }|I d H  |  d| j  ¡I d H  W n tyn } z|  d| j |f ¡I d H  W Y d }~nd }~ww W n2 ty¢ } z&|  d| j |f ¡I d H  W Y d }~W | j| jj D ]	}| 	¡ I d H  q’d S d }~ww W | j| jj D ]	}| 	¡ I d H  q«d S | j| jj D ]	}| 	¡ I d H  q¾w )Né   z'[SMBRELAY][%s][INF] Got new connection!)Úconnection_idz"[SMBRELAY][%s][INF] Connection endz[SMBRELAY][%s][ERR] %sz1[SMBRELAY][%s][ERR] SMB Server stopped! Error: %s)
r4   r   r   r0   r"   r3   ÚappendÚrunÚ	ExceptionÚstop)r%   r(   ÚsmbconnectionÚconnection_taskÚer   r   r   Ú__handle_connection0   s>   €
&€ÿ€ÿ€ü€ÿÿzSMBServer.__handle_connectionc                 Ã   s&   �t | jtƒ ƒ| _| j | j¡I d H S r   )r   r/   r   r1   Úserve_callbackÚ_SMBServer__handle_connection)r%   r   r   r   r8   G   s   €zSMBServer.runN)r+   r,   r-   r&   r   r@   r8   r   r   r   r   r.   #   s
    r.   c              
   Ã   s  �zhddl m} ddlm} ddlm} |dƒ}	 |  ¡ I d H }t|ƒ |||ddd�}| ¡ I d H \}}|d urHtd	| ƒ tt	 
|j¡ƒ q||ƒ}	|	 ¡ 2 z3 d H W \}
}|d urctd
| ƒ qPt|
ƒ qP6 q ty€ } zt	 ¡  W Y d }~d S d }~ww )Nr   )ÚSMBConnection)Ú	SMBTarget)Ú
SMBMachinez
10.10.10.2TF)Úpreserve_gssapiÚnosignzSMB client login err: %szSMB client list_shares err: %s)Úaiosmb.connectionrA   Ú aiosmb.commons.connection.targetrB   Ú!aiosmb.commons.interfaces.machinerC   Úgetr   ÚloginÚ	tracebackÚ	format_tbÚ__traceback__Úlist_sharesr9   Ú	print_exc)ÚrqrA   rB   rC   Útest_targetÚitemr(   Ú_ÚerrÚmachineÚsharer=   r   r   r   Útest_relay_queueK   s8   €
üö€þrW   c               
   ƒ   sâ   �zXt  ¡ ‰ t  tˆ ƒ¡} tddtjƒ}t‡ fdd„ƒ}tj	g|_
d|_d|_d|_t ¡ |_d|_ddi|_t||ƒ}| ¡ I d H \}}|d urRtd	| ƒ W d S |I d H  W d S  typ } zt ¡  W Y d }~d S d }~ww )
Nz0.0.0.0i½  c                      s   t ˆ dd„ ƒS )Nc                   S   s   t ƒ S r   r   r   r   r   r   Ú<lambda>k   s    z)amain.<locals>.<lambda>.<locals>.<lambda>r   r   ©Úauth_relay_queuer   r   rX   k   s    zamain.<locals>.<lambda>r   FÚtestz/tmp/smbsharezSMB server error: %s)ÚasyncioÚQueueÚcreate_taskrW   r   r   Ú
SERVER_TCPr   r
   r   r   r   r   r   r    r!   r"   r#   r$   r.   r8   r   r9   rK   rO   )Úxr/   r0   r1   Úserver_taskrT   r=   r   rY   r   Úamaine   s2   €

ÿ
€þrb   Ú__main__)Úasysocks.unicomm.common.targetr   r   Úasysocks.unicomm.serverr   Úaiosmb.transport.netbiosr   Ú'aiosmb.protocol.smb2.commands.negotiater   r   r   r	   r
   Ú.aiosmb.wintypes.dtyp.constrcuted_security.guidÚaiosmb.server.serverconnectionr   Ú&asyauth.protocols.spnego.server.nativer   Ú$asyauth.protocols.ntlm.server.nativer   Úasyauth.common.credentials.ntlmr   rK   r\   r   r   r.   rW   rb   r+   r8   r   r   r   r   Ú<module>   s&    (ÿ