o
    Žõ±jª  ã                   @   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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rhe eƒ ¡ d	S d	S )é    )Ú	UniTargetÚUniProto)Ú	UniServer)ÚNetBIOSPacketizer)ÚNEGOTIATE_REQÚNEGOTIATE_REPLYÚNegotiateSecurityModeÚNegotiateCapabilitiesÚNegotiateDialects)Ú*)ÚSMBRelayServerConnection©Úspnegorelay_ntlm_factory)ÚNTLMRelaySettingsÚntlmrelay_factoryNc                 Ã   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/relay/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 )
ÚSMBRelayServerc                 C   s(   || _ || _d | _d | _i | _d| _d S )Nr   )ÚtargetÚsettingsÚserverÚserving_taskÚconnectionsÚconnection_ctr)r$   r.   r/   r   r   r   r%   #   s   
zSMBRelayServer.__init__c                 Ã   s(   �| j jd ur| j  |¡I d H  d S d S r   )r/   r   )r$   r   r   r   r   r   +   s   €ÿzSMBRelayServer.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)
r3   r   r   r/   r!   r2   ÚappendÚrunÚ	ExceptionÚstop)r$   r'   ÚsmbconnectionÚconnection_taskÚer   r   r   Ú__handle_connection/   s>   €
&€ÿ€ÿ€ü€ÿÿz"SMBRelayServer.__handle_connectionc                 Ã   s&   �t | jtƒ ƒ| _| j | j¡I d H S r   )r   r.   r   r0   Úserve_callbackÚ"_SMBRelayServer__handle_connection)r$   r   r   r   r7   F   s   €zSMBRelayServer.runN)r*   r+   r,   r%   r   r?   r7   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.connectionr@   Ú aiosmb.commons.connection.targetrA   Ú!aiosmb.commons.interfaces.machinerB   Úgetr   ÚloginÚ	tracebackÚ	format_tbÚ__traceback__Úlist_sharesr8   Ú	print_exc)Úrqr@   rA   rB   Útest_targetÚitemr'   Ú_ÚerrÚmachineÚsharer<   r   r   r   Útest_relay_queueJ   s8   €
üö€þrV   c               
   ƒ   sÀ   �zGt  ¡ ‰ t  tˆ ƒ¡} tddtjƒ}t‡ fdd„ƒ}tj	g|_
d|_d|_d|_t ¡ |_d|_i |_t||ƒ}| ¡ I d H }|I d H  W d S  ty_ } 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>j   s    z)amain.<locals>.<lambda>.<locals>.<lambda>r   r   ©Úauth_relay_queuer   r   rW   j   s    zamain.<locals>.<lambda>r   F)ÚasyncioÚQueueÚcreate_taskrV   r   r   Ú
SERVER_TCPr   r
   r   r   r   r   r   r   r    r!   r"   r#   r-   r7   r8   rJ   rN   )Úxr.   r/   r0   Úserver_taskr<   r   rX   r   Úamaind   s*   €


€þr`   Ú__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.relay.serverconnectionr   Ú%asyauth.protocols.spnego.relay.nativer   Ú#asyauth.protocols.ntlm.relay.nativer   r   rJ   rZ   r   r   r-   rV   r`   r*   r7   r   r   r   r   Ú<module>   s$    (ÿ