o
    j                     @   s   d dl 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
 d dlmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZ d d
lmZ G dd dZdS )    N)
DCERPCAuth)DCERPCTarget)SMBConnection)DCERPC5Connection)even6)EPM)RPC_C_AUTHN_LEVEL_NONERPC_C_AUTHN_LEVEL_PKT_INTEGRITYRPC_C_AUTHN_LEVEL_PKT_PRIVACYDCERPCExceptionRPC_C_AUTHN_GSS_NEGOTIATERPC_C_AUTHN_LEVEL_CONNECT)Fragment)
RESULT_SETc                   @   s   e Zd Zdd Zdd Zdd Zdd Zeddede	de	fddZ
eddede	de	fddZdejejB fddZdddZdd Zd	S )Even6RPCc                 C   s   d | _ tj| _i | _d | _d S N)service_pipenamer   MSRPC_UUID_EVEN6service_uuidhandlesdceself r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/dcerpc/v5/interfaces/even6.py__init__   s   
zEven6RPC.__init__c                    s   | S r   r   r   r   r   r   
__aenter__   s   zEven6RPC.__aenter__c                    s   |   I d H  dS N)TN)close)r   exc_typeexc	tracebackr   r   r   	__aexit__    s   zEven6RPC.__aexit__c              
      sd   z| j rz| j  I d H  W W d S    Y W d S W dS  ty1 } z
d |fW  Y d }~S d }~ww r   )r   
disconnect	Exception)r   er   r   r   r   $   s   zEven6RPC.closeNTF
connectionopenperform_dummyc              
      s   z>t  }| |_|j| |d u r|jt |j I d H \}}|d ur(||jt  jI d H \}}|d ur;||d fW S  tyU } z
d|fW  Y d }~S d }~ww )NF)r   r   set_auth_levelr
   connectbindr   r$   )r&   
auth_levelr'   r(   service_errr%   r   r   r   from_rpcconnection1   s$   
zEven6RPC.from_rpcconnectionc              
      s.  zzd|du r	t }t| }| I dH \}}|dur||t jI dH \}}|dur/|tj|| d}t	
| j}	t|	|}
tj|
|||dI dH \}}|durU||dfW W |durf| I dH  S S  ty } zd|fW  Y d}~W |dur| I dH  S S d}~ww |dur| I dH  w w )z
		Creates the connection to the service using an established SMBConnection.
		This connection will use the given SMBConnection as transport layer.
		N)smb_connection)r,   r'   r(   )r
   r   from_smbconnectionr*   mapr   r   r   from_connection_stringr   from_smb_gssapigssapir   r0   r#   r$   )r&   r,   r'   r(   epmr.   r/   	constringtargetdcerpc_authrpc_connectionr-   r%   r   r   r   r2   G   s>   


zEven6RPC.from_smbconnection*c              
      s   z0|d dkr|d7 }|d dkr|d7 }t j| j|||dI d H \}}|d ur+||d d fW S  tyG } z
d |fW  Y d }~S d }~ww )N )queryHandle)r   hEvtRpcRegisterLogQueryr   r$   )r   pathr?   flagsresr/   r%   r   r   r   register_queryj   s   zEven6RPC.register_query  c              
   C  sf  zd}g }||kr| | n d}	 | | ||7 }|| |k r#q||kr(n| ||  	 |D ]e}tj| j|||dI d H \}}	|	d urI|	dd |d D }
dd |d	 D }td
|d }t|
|D ],\}}||tj	 |du rt
||d fV  qjtt
||j d fV  qjq2W d S  ty } zd |fV  W Y d }~d S d }~ww )N
   r   T)
timeOutEndc                 S      g | ]}|d  qS Datar   .0xr   r   r   
<listcomp>       z'Even6RPC.query_next.<locals>.<listcomp>EventDataIndicesc                 S   rI   rJ   r   rL   r   r   r   rO      rP   EventDataSizes    ResultBufferF)appendr   hEvtRpcQueryNextr   ioBytesIOjoinzipseekSEEK_SETr   
from_bytesreadr   	eventDatato_xmlr$   )r   handlenum_reqtimeoutas_xmlonetimerangesirD   r/   possizebuffpsr%   r   r   r   
query_nexty   sF   
$
zEven6RPC.query_nextc              
      sj   zt | jI d H \}}|d ur|dd |d D d fW S  ty4 } z
d |fW  Y d }~S d }~ww )Nc                 S   s   g | ]
}|d   ddqS )rK   r>    )replacerL   r   r   r   rO      s    z*Even6RPC.list_channels.<locals>.<listcomp>ChannelPaths)r   hEvtRpcGetChannelListr   r$   )r   rD   r/   r%   r   r   r   list_channels   s   zEven6RPC.list_channels)NTF)rF   F)__name__
__module____qualname__r   r   r"   r   staticmethodr   boolr0   r   r2   r   EvtQueryChannelNameEvtReadNewestToOldestrE   rm   rr   r   r   r   r   r      s    "
'r   )asyncioosrW   1aiosmb.dcerpc.v5.common.connection.authenticationr   )aiosmb.dcerpc.v5.common.connection.targetr   aiosmb.connectionr   aiosmb.dcerpc.v5.connectionr   aiosmb.dcerpc.v5r   'aiosmb.dcerpc.v5.interfaces.endpointmgrr   aiosmb.dcerpc.v5.rpcrtr   r	   r
   r   r   r   $aiosmb.dcerpc.v5.common.even6.binxmlr   'aiosmb.dcerpc.v5.common.even6.resultsetr   r   r   r   r   r   <module>   s    