o
    j                     @   s   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 ddg ddfdede
e d	ed
ede
e defddZdd Zdd ZedkrQe  dS dS )    N)KerberosClientFactorykerberos_url_help_epilog)
kerberoast)List)         Fconnection_urlusersdomainout_fileetypescross_domainc              
      s  z2g }g }t | }t|tdu r|g}g }	|D ]2}
t|
trLt|
 rGt|
d}|		|
   W d    n1 sAw   Y  q|	|
 qt|tdu rW|g}g }|D ]}t|tro|	dd |dD  t|try|| q[|}|	}|d u r|D ]}|ddkr|dd } nq| j}|d u rtd	g }|D ]}|ddkr||dd
  q|| qd }t|||||d2 z3 d H W \}}}|d ur|||f q|||f q6 |d urt|ddd}|D ]\}}||d  qW d    n	1 sw   Y  |D ]\}}td||f  q|D ]	\}}t| q(W d S  tyL } zt  W Y d }~d S d }~ww )NFrc                 S   s   g | ]}t |qS  )int).0xr   r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/examples/spnroast.py
<listcomp>"   s    zspnroast.<locals>.<listcomp>,@   zNo domain specifiedr   )override_etyper   w )newlinez
z%s error: %s)r   from_url
isinstanceliststrpathlibPathexistsopenextendread
splitlinesappendsplitr   find	get_credsr   	Exceptionr   writeprint	traceback	print_exc)r	   r
   r   r   r   r   
results_okresults_errcuusers_finaluserfetypes_finaletypeusernameusers_nodomainreserr_resulter   r   r   spnroast	   s   






$
rA   c                     s  dd l } | jd| jtd}|jddd |jddd |jd	d
dd |jdddd |jddddd |jdddd |jddddd | }|jdkrWtjtj	d n|jdkrdtjtj
d ntjdd t|jdkrwtd d S t|j|j|j|j|j|jI d H  d S ) Nr   
Kerberoast)descriptionformatter_classepilogkerberos_connection_urlzothe kerberos target string in the following format kerberos+<stype>://<domain>\<username>@<domaincontroller-ip>)helpr   z6Realm. Use this if you specify username in "spn" fieldr
   *zPUser/username to kerberoast. Can be a file with usernames, or a single username.)nargsrG   z--cross-domain
store_truezSPN is in another domain.)actionrG   z-ez--etypesz23,17,18z*Encryption types to use. Default: 23,17,18)defaultrG   z-oz
--out-filez3Write results to this file instead of printing themz-vz	--verbosecount)rK   rL   )levelr   z"Please provide users to kerberoast)argparseArgumentParserRawDescriptionHelpFormatterr   add_argument
parse_argsverboseloggingbasicConfigINFODEBUGlenr
   r/   rA   rF   r   r   r   r   )rO   parserargsr   r   r   amainO   s(   

(r\   c                   C   s   t t  d S )N)asynciorunr\   r   r   r   r   maini   s   r_   __main__)rU   r]   r0   r"   minikerberos.common.factoryr   r   minikerberos.securityr   typingr   r!   r   boolrA   r\   r_   __name__r   r   r   r   <module>   s    8F
