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  zzn|  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  qd S d }~ww W | j| jj D ]	}|	 I d H  qd S | j| jj D ]	}|	 I d H  qw )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$    (