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  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)
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&    (