o
    àý°j½#  ã                   @   s‚   d dl Z d dlZd dlZzd dlmZ W n ey#   d dlmZ Y nw d dlmZ d dlm	Z	 G dd„ dƒZ
G dd„ de	ƒZdS )	é    N)Úurlparse)ÚLOG)ÚThreadc                   @   sH   e Zd Zddd„Zedd„ ƒZdd„ Zdd	d
„Zddd„Zddd„Z	dS )ÚTargetsProcessorNFc                 C   sh   g | _ g | _|| _|d u rd | _|  ||¡| _n
|| _g | _|  ¡  |du r,t | j¡ | j	dd� d S )NT)Úfull_reload)
ÚfinishedAttacksÚfailedAttacksÚprotocolClientsÚfilenameÚprocessTargetÚoriginalTargetsÚreadTargetsÚrandomÚshuffleÚreloadTargets)ÚselfÚtargetListFileÚsingleTargetr	   Ú	randomize© r   ú¢/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/ntlmrelayx/utils/targetsutils.pyÚ__init__/   s   zTargetsProcessor.__init__c                 C   sn   |   d¡dkrtd|  ƒgS g }| d d…  ¡ dkr2| dd … }|D ]}| td||f ƒ¡ q"|S t| ƒgS )Nz://r   zsmb://%sé   ÚALLz%s%s)Úfindr   ÚupperÚappend)Útargetr	   ÚretValsÚstrippedTargetÚprotocolr   r   r   r   D   s   
zTargetsProcessor.processTargetc              
   C   sÐ   z9t | jdƒ�)}g | _|D ]}| ¡ }|dkr(|d dkr(| j |  || j¡¡ qW d   ƒ n1 s3w   Y  W n tyU } zt 	d| jt
|ƒ¡ W Y d }~nd }~ww t| jƒdkrbt d¡ |  ¡  d S )NÚrÚ r   ú#zCould not open file: %s - %sz$Warning: no valid targets specified!)Úopenr
   r   ÚstripÚextendr   r	   ÚIOErrorr   ÚerrorÚstrÚlenÚcriticalr   )r   ÚfÚliner   Úer   r   r   r   U   s$   €ýþ€ €ÿ
zTargetsProcessor.readTargetsc                    s@   |rg ˆ _ g ˆ _‡ fdd„ˆ jD ƒˆ _‡ fdd„ˆ jD ƒˆ _d S )Nc                    s.   g | ]}|ˆ j vr|ˆ jvr|jd u r|‘qS ©N©r   r   Úusername©Ú.0Úx©r   r   r   Ú
<listcomp>j   ó   . z2TargetsProcessor.reloadTargets.<locals>.<listcomp>c                    s.   g | ]}|ˆ j vr|ˆ jvr|jd ur|‘qS r/   r0   r2   r5   r   r   r6   k   r7   )r   r   r   ÚgeneralCandidatesÚnamedCandidates)r   r   r   r5   r   r   f   s
   zTargetsProcessor.reloadTargetsc                 C   s¾   |j d ur|r| j |¡ d S | j |¡ d S |d ur]|j d¡dkr:|jr:td|j| dd¡|j	|j
|jf ƒ}ntd|j| dd¡|j	|j
f ƒ}|rU| j |¡ d S | j |¡ d S d S )NÚhttpr   z%s://%s@%s%s?%sú/ú\z%s://%s@%s%s)r1   r   r   r   Úschemer   Úqueryr   ÚreplaceÚnetlocÚpath)r   r   ÚgotRelayÚgotUsernameÚ	newTargetr   r   r   ÚregisterTargetm   s   
("õzTargetsProcessor.registerTargetTc                    s@  |d urIt | jƒdkrI| jD ]:‰ˆjd urHˆj ¡ | dd¡kr*| j ˆ¡ ˆ  S ˆj d¡dk rHˆj ¡ | d¡d krH| j ˆ¡ ˆ  S qt | jƒdkrÒ|d ur¢| jD ]A‰dˆj	| dd¡ˆj
ˆj f ‰‡fdd„| jD ƒ}‡fdd„| jD ƒ}t| jƒ t |ƒdkr˜t |ƒdkr˜| j ˆ¡ ˆ  S qWt d	| ¡ d S |d
krÍ| jD ]‰‡fdd„| jD ƒ}t |ƒdkrÅ| j ˆ¡ ˆ  S q©t d¡ d S | j ¡ S t | jƒdkrõdd„ | jD ƒ‰dd„ | jD ƒ‰ ‡ ‡fdd„| jD ƒ| _t | jƒdk�rt | jƒdk�rt d¡ d S |d u�rt d	| ¡ d S |  ||¡S )Nr   r;   r<   é   z
%s://%s@%sc                    ó$   g | ]}|  ¡  ¡ ˆ  ¡ kr|‘qS r   ©Úgeturlr   r2   ©Ú	tmpTargetr   r   r6   ˜   ó   $ z.TargetsProcessor.getTarget.<locals>.<listcomp>c                    rG   r   rH   r2   rJ   r   r   r6   ™   rL   zNo more targets for user %sFc                    s(   g | ]}|j ˆ jkr|jˆ jkr|‘qS r   )Úhostnamer@   r=   r2   )r   r   r   r6   £   s   ( zNo more targetsc                 S   ó   g | ]	}|j |jd �‘qS ©)r@   ©Ú_replacerM   ©r3   Úan_atkr   r   r   r6   ®   ó    c                 S   rN   rO   rP   rR   r   r   r   r6   ¯   rT   c                    s*   g | ]}|ˆvr|ˆ vr|j d u r|‘qS r/   )r1   r2   )r   r   r   r   r6   °   s    ÿzAll targets processed!)r*   r9   r1   r   r?   Úremover   Úsplitr8   r=   r@   rA   r   r   Úprintr   ÚdebugÚpopr   ÚinfoÚ	getTarget)r   ÚidentityÚ
multiRelayÚmatchÚ
fail_matchr   )r   r   r   rK   r   r[   �   s\   

€
 
€
þ



ýzTargetsProcessor.getTarget)NNNF)F)FN)NT)
Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr   r   r   rE   r[   r   r   r   r   r   .   s    



r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTargetsFileWatcherc                 C   s&   t  | ¡ || _t | jj¡j| _d S r/   )r   r   ÚtargetprocessorÚosÚstatr
   Úst_mtimeÚ	lastmtime)r   re   r   r   r   r   ¿   s   
zTargetsFileWatcher.__init__c                 C   sB   	 t  | jj¡j}|| jkrt d¡ || _| j ¡  t	 
d¡ q)NTz"Targets file modified - refreshingg      ð?)rf   rg   re   r
   rh   ri   r   rZ   r   ÚtimeÚsleep)r   Úmtimer   r   r   ÚrunÄ   s   



úzTargetsFileWatcher.runN)r`   ra   rb   r   rm   r   r   r   r   rd   ¾   s    rd   )rf   r   rj   Úurllib.parser   ÚImportErrorÚimpacketr   Ú	threadingr   r   rd   r   r   r   r   Ú<module>   s   "ÿ 