o
    j"                     @   s   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 d dlm	Z	 d dl
mZ d dlmZ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mZmZmZmZ d d
lmZ G dd dZG dd dZ G dd dZ!dd Z"e#dkr|e"  dS dS )    N)logger)
__banner__)HTTPProxyAuthFailed)SOCKS5AuthFailed)SOCKSClientSocksTunnelError)SocksCredential)SocksQueueComms)
SOCKS5Method
SOCKS5NegoSOCKS5NegoReplySOCKS5RequestSOCKS5ReplySOCKS5ReplyTypeSOCKS5CommandSOCKS5PlainAuthSOCKS5PlainAuthReplySOCKS5ServerErrorReply)SocksClientURLc                   @   s    e Zd ZdZdd Zdd ZdS )FileStringGenz
	Parses a file line by line
	c                 C   
   || _ d S N)filename)selfr    r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/examples/socksbrute.py__init__      
zFileStringGen.__init__c              
      s   z?d}t | jd*}|D ]}| }|dkrq||I d H  tdI d H  |d7 }qW d    n1 s7w   Y  |d fW S  tyV } z
||fW  Y d }~S d }~ww )Nr   r    )openr   stripputasynciosleep	Exception)r   target_qcntflineer   r   r   run   s$   


zFileStringGen.runN)__name__
__module____qualname____doc__r   r,   r   r   r   r   r      s    r   c                   @   s   e Zd Zdd Zdd ZdS )ListStringGenc                 C   r   r   )targets)r   r2   r   r   r   r   +   r   zListStringGen.__init__c              
      sr   z!d}| j D ]}||I d H  tdI d H  |d7 }q|d fW S  ty8 } z
||fW  Y d }~S d }~ww )Nr   r    )r2   r#   r$   r%   r&   )r   r'   r(   targetr+   r   r   r   r,   .   s   


zListStringGen.runN)r-   r.   r/   r   r,   r   r   r   r   r1   *   s    r1   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )
SOCKSBrutec                 C   sv   || _ g | _g | _i | _d| _d| _d| _d| _d| _d| _	d | _
d| _g | _d | _d | _d | _d| _d| _d| _d S )Nd   r       z8.8.8.85   Fr   )proxies	user_genspassword_gens	passwords
worker_cnttimeoutmax_retriesretries_sleepverify_targetverify_portoutput_fileonly_positive_SOCKSBrute__worker_tasks_SOCKSBrute__addr_queue_SOCKSBrute__target_queue_SOCKSBrute__result_queue_SOCKSBrute__total_addrs_SOCKSBrute__total_targets_SOCKSBrute__total_finished)r   r8   r   r   r   r   <   s&   
zSOCKSBrute.__init__c           	   
      s  z	 z| j  I d H }|d u rW W d S |\}}}| j}|dkr|| jkr.t| jI d H  |d8 }| I d H \}}|d urvt|tt	frT| j
||dd fI d H  n0t|tretdt|j  nt|trutdt|j  q| j
||dd fI d H  	 |dkr| j
||d |fI d H  W n tjy   Y W d S  ty } zW Y d }~nd }~ww q tjy   Y d S  ty } zt| W Y d }~d S d }~ww )NTr   r    FzTunnel setup failed!. Reason %sz5Failed socket connection to initial proxy!. Reason %s)rF   getr>   r$   r%   r?   handle_queue
isinstancer   r   rG   r#   r   r   debug	traceback	format_tb__traceback__OSErrorCancelledErrorr&   print)	r   tempusernamepasswordclientretries_errr+   r   r   r   	__scannerQ   sR   



%zSOCKSBrute.__scannerc           
   
      s2  z	 | j  I d H }|d u rnd| j|< q	 | j I d H }|d u r$nV| jD ]Q}|  jd7  _t }||_||_t	| j
}d|d _d|d _| j|d _| j|d _||d _t }t }t||}t||}| j|||fI d H  q'q| j  W d S  ty }	 zt|	 W Y d }	~	d S d }	~	ww )NTr    )_SOCKSBrute__passwords_queuerK   r;   _SOCKSBrute__users_queuerI   r   rV   rW   copydeepcopyr8   	only_open	only_authr@   endpoint_iprA   endpoint_port
credentialr$   Queuer	   r   rF   r#   $_SOCKSBrute__target_gen_finished_evtsetr&   rT   )
r   rW   userrf   r8   in_qout_qcommsrX   r+   r   r   r   __gen_targets~   sD   






zSOCKSBrute.__gen_targetsc              
         z,| j D ]}|| jI d H \}}|d urt| |  j|7  _q| jd I d H  W d S  tyD } zt| W Y d }~d S d }~ww r   )r9   r,   r_   rT   rH   r#   r&   )r   user_genr(   r[   r+   r   r   r   __gen_users      
zSOCKSBrute.__gen_usersc              
      ro   r   )r:   r,   r^   rT   rH   r#   r&   )r   password_genr(   r[   r+   r   r   r   __gen_passwords   rr   zSOCKSBrute.__gen_passwordsc           	   
      s  zt  | _t  | _t | j| _t  | _t  | _t 	| 
  t 	|   t 	|   t| jD ]}| jt 	|   q7d }| jd urTt| jddd}	 | j I d H \}}}}|  jd7  _|d urxt| tt|j |d u r|d ur|d||f  n+|du rtd|||f  n| jdu rtd|||f  n| jdu rtd|||f  | j du r| j| jkrnqUtt| jD ]}| jd I d H  q| jD ]}|  qW d	S  t y } z
d|fW  Y d }~S d }~ww )
Nwr   )newlineTr    z%s:%s
z%s:%s -> %sF)TN)!r$   rg   r^   r_   r<   rF   rG   Eventrh   create_task_SOCKSBrute__gen_passwords_SOCKSBrute__gen_users_SOCKSBrute__gen_targetsrangerD   append_SOCKSBrute__scannerrB   r!   rK   rJ   rT   rO   rP   rQ   writerC   is_setrI   lenr#   cancelr&   )	r   rZ   outfilerV   rW   statusr[   workerr+   r   r   r   r,      sX   








zSOCKSBrute.runN)	r-   r.   r/   r   r~   r{   rz   ry   r,   r   r   r   r   r4   ;   s    -'r4   c            
      C   s  dd l } | jdd}|jddddd |jd	d
ddd |jddtd dd |jddtddd |jdddddd |jddddd |jdddd  |jd!dd"d |jd#d$d%d& | }|jd'u rhtt t	d( |j
dkryt	tj n
|j
d)krt	d t|j}t|}|j|_|j|_|j|_|j|_|jd u s|jd u rtd* d S g }|jD ]}zt|d+}|  |jt| W q   || Y qt|dkr|jt | t|jdkrtd, d S g }|jD ]}zt|d+}|  |j!t| W q   || Y qt|dkr!|j!t | t|j!dkr/td- d S t"#|# \}}	|	d urEtd.|	  d S |jd'u rQtd/ d S d S )0Nr   zSOCKS5 proxy auth bruteforcer)descriptionz-uz--usersr}   z9User or users file with one user per line. can be stacked)actionhelpz-pz--passwordszDPassword or password file with one password per line. can be stackedz-tz	--timeoutzBrute retries sleep time)typedefaultr   z-wz--worker-countr    Parallelismz-vz	--verbosecount	Verbosity)r   r   r   z-sz--silent
store_truezdont print bannerz-oz
--out-filezoutput file)r   z
--positivezonly show sucsessful resultsr8   *zconnection string(s) of the target proxy. if you want a chain of proxies to use before reaching the target then supply the chain in order, the target must be the LAST OF THE URLS!!!)nargsr   Fr5      z2Users "-u" and Passwords "-p" must be set! Exitingr   z![-] No suitable users were found!z%[-] No suitable passwords were found!z%Failed to perform bruting! Reason: %szDone!)$argparseArgumentParseradd_argumentint
parse_argssilentrT   r   r   setLevelverboseloggingDEBUGr   	from_urlsr8   r4   r=   worker_countr<   out_filerB   positiverC   usersr;   r!   closer9   r}   r   r   r1   r:   r$   r,   )
r   parserargs
proxychainbrutenotfiler3   r)   rZ   r[   r   r   r   main   sz   









r   __main__)$r$   r   rO   r`   asysocksr   asysocks._versionr   asysocks.protocol.httpr   asysocks.protocol.socks5r   asysocks.clientr   r   asysocks.common.credentialsr   asysocks.common.commsr	   r
   r   r   r   r   r   r   r   r   r   asysocks.common.clienturlr   r   r1   r4   r   r-   r   r   r   r   <module>   s*   0 9P
