o
    Žõ±jN  ã                   @   sD  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ G dd„ dƒZddd„Z	e
d	kr d dlZejd
d�Zejdddd dd� ejddd� ejdddd� ejdddd� e ¡ Zejd kroejejd� ej ej¡ n!ejdkrƒejejd� ej ej¡ nejdd� ej ej¡ e  e	ejdejejd�¡ dS dS ) é    N)ÚSAMRRPC)Úsamrc                   @   sr   e Zd Zddd„Zdd„ Zdd„ Zejfdd	„Zd
d„ Z	dd„ Z
ejfdd„Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú	SMBDomainNc                 C   sD   || _ || _d | _|| _d | _d | _|d u r|d u r tdƒ‚d S d S )Nz+Either SAMR or CONNECTION must be provided!)Údomain_nameÚ
connectionÚdomain_access_levelr   Ú
domain_sidÚdomain_handleÚ	Exception)Úselfr   r   r   © r   ú‘/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/dcerpc/v5/common/domain.pyÚ__init__
   s   ÿzSMBDomain.__init__c                 Ã   s   �| S ©Nr   )r   r   r   r   Ú
__aenter__   ó   €zSMBDomain.__aenter__c                 Ã   s   �d S r   r   )r   Úexc_typeÚexcÚ	tracebackr   r   r   Ú	__aexit__   r   zSMBDomain.__aexit__c              
   Ã   s²   �|| _ | jd u r>t | j¡I d H \| _}|d ur|‚t d¡ z
| j ¡ I d H  W n ty= } zt 	d¡ |‚d }~ww | j 
| j¡I d H | _| jj| j| j d�I d H | _d S )NúConnecting to SAMRzFailed to connect to SAMR©Úaccess_level)r   r   r   Úfrom_smbconnectionr   ÚloggingÚdebugÚconnectr
   Ú	exceptionÚget_domain_sidr   r   Úopen_domainr	   )r   r   ÚerrÚer   r   r   Úopen   s    €


€þ zSMBDomain.openc                 Ã   s:   �t jjt jjfD ]}| j  | j|¡I d H }| ¡  q	|S r   )r   ÚDOMAIN_INFORMATION_CLASSÚDomainPasswordInformationÚDomainGeneralInformation2Úget_infor	   Údump)r   ÚiÚinfor   r   r   r&   ,   s   €þ
zSMBDomain.get_infoc                 C  ó2   �| j  | j¡2 z3 d H W \}}||fV  q6 d S r   )r   Úenumerate_usersr	   )r   Ú	user_nameÚuser_sidr   r   r   Ú
list_users6   ó   €ÿzSMBDomain.list_usersc                 Ã   s:   �|  | jd¡dd … }| jj| jt|ƒ|d�I d H }|S )NÚ é   r   )Úreplacer   r   Ú	open_userr	   Úint)r   r-   r   Úuser_ridÚuser_handler   r   r   r3   :   s   €zSMBDomain.open_userc                 C  s(   �| j  |¡2 z	3 d H W }|V  q6 d S r   )r   Úget_user_group_memberships)r   r6   Ú	group_sidr   r   r   r7   ?   s   €ÿz$SMBDomain.get_user_group_membershipsc                 Ã   s&   �| j  |t jj¡I d H }| ¡  |S r   )r   Úget_user_infoÚUSER_INFORMATION_CLASSÚUserParametersInformationr'   )r   r6   r)   r   r   r   r9   C   s   €zSMBDomain.get_user_infoc                 C  r*   r   )r   Úlist_domain_groupsr	   )r   ÚnameÚsidr   r   r   Úlist_groupsH   r/   zSMBDomain.list_groupsc                 Ã   s    �| j  |¡I d H }| ¡  |S r   )r   Úget_security_infor'   )r   Úhandler)   r   r   r   r@   L   s   €zSMBDomain.get_security_info)NN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚMAXIMUM_ALLOWEDr"   r&   r.   r3   r7   r9   r?   r@   r   r   r   r   r   	   s    

r   Fc                 Ã   sž  �ddl m} | | ¡ ¡ 4 I d H š¬}| ¡ I d H  t||d�4 I d H š…}t d¡ z|jt	j
d�I d H  W n tyM } zt d¡ W Y d }~nd }~ww | ¡ I d H \}}	|	d ur]|	‚t|ƒ | ¡ 2 z83 d H W \}
}t|
|ƒ z|j|t	jd�I d H }| |¡I d H }W qe ty� } z
t|ƒ W Y d }~qed }~ww 6 W d   ƒI d H  n1 I d H s¯w   Y  W d   ƒI d H  n1 I d H sÄw   Y  tdƒ d S )Nr   )ÚSMBConnectionFactory)r   r   r   zFailed to create domain objectzDone!)Ú!aiosmb.commons.connection.factoryrF   Úfrom_urlÚget_connectionÚloginr   r   r   r"   r   ÚDOMAIN_ALL_ACCESSr
   r   r&   Úprintr.   r3   ÚUSER_ALL_ACCESSr9   )Úconnection_stringr   Úout_fileÚjson_outrF   r   Údomainr!   r)   r    r,   r-   r6   Ú	user_infor   r   r   Údomain_testV   s<   €
€ÿ
€þ÷*ô(ýrS   Ú__main__z&List user sessions on a remote machine)Údescriptionz-vz	--verboseÚcountz"Increase verbosity, can be stacked)ÚactionÚdefaultÚhelprN   zFconnection string. Identifies the credential to be used and the target)rY   z-oz
--out-filezfile to store the results inz--jsonÚ
store_truez*File output will be pritten in JSON format)rW   rY   )Úlevelr1   ÚTEST)rO   rP   )NF)Úasyncior   ÚjsonÚaiosmbÚ#aiosmb.dcerpc.v5.interfaces.samrmgrr   Úaiosmb.dcerpc.v5r   r   rS   rB   ÚargparseÚArgumentParserÚparserÚadd_argumentÚ
parse_argsÚargsÚverboseÚbasicConfigÚINFOÚloggerÚsetLevelÚWARNINGÚDEBUGÚrunrN   rO   r   r   r   r   Ú<module>   s4    
M#

 ê