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rd 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re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 sw   Y  W d   I d H  n1 I d H sw   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#

 