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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G dd„ dƒZG dd„ dƒZdd„ Zedkrpeƒ  dS dS )é    N)Úlogger)ÚSOCKSClient)ÚSocksQueueComms)
ÚSOCKS5MethodÚ
SOCKS5NegoÚSOCKS5NegoReplyÚSOCKS5RequestÚSOCKS5ReplyÚSOCKS5ReplyTypeÚSOCKS5CommandÚSOCKS5PlainAuthÚSOCKS5PlainAuthReplyÚSOCKS5ServerErrorReply)ÚSocksClientURLc                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚFileTargetPortGenc                 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/socksportscan.pyÚ__init__   ó   
zFileTargetPortGen.__init__c           	   
   Ã   s"  �zyd}t | jdƒ�d}|D ]Y}| ¡ }|dkrq| d¡dkrG| d¡\}}tt|ƒt|ƒƒD ]}| |¡I d H  t 	d¡I d H  |d7 }q/qzt|ƒ}| |¡I d H  t 	d¡I d H  |d7 }W q   Y qW d   ƒ n1 sqw   Y  |d fW S  t
y� } z
||fW  Y d }~S d }~ww )Nr   ÚrÚ ú-éÿÿÿÿé   )Úopenr   ÚstripÚfindÚsplitÚrangeÚintÚputÚasyncioÚsleepÚ	Exception)	r   Útarget_qÚcntÚfÚlineÚstartÚendÚiÚer   r   r   Úrun   s:   €
ýíÿ
€ÿzFileTargetPortGen.runN©Ú__name__Ú
__module__Ú__qualname__r   r3   r   r   r   r   r      ó    r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚFileTargetIPGenzS
	Parses a file line by line looking for ip address or ipaddres range or hostname
	c                 C   r   r   r   r   r   r   r   r   3   r   zFileTargetIPGen.__init__c              
   Ã   s<  �z†d}t | jdƒ�q}|D ]f}| ¡ }|dkrqzt |¡ | |¡I d H  t d¡I d H  |d7 }W q   Y z"tj|dd�D ]}| t	|ƒ¡I d H  t d¡I d H  |d7 }q@W q   Y | |¡I d H  t d¡I d H  |d7 }qW d   ƒ n1 s~w   Y  |d fW S  t
y� } z
||fW  Y d }~S d }~ww )Nr   r   r   r    F©Ústrict)r!   r   r"   Ú	ipaddressÚ
ip_addressr'   r(   r)   Ú
ip_networkÚstrr*   )r   r+   r,   r-   r.   Úipaddrr2   r   r   r   r3   6   sD   €


çÿ
€ÿzFileTargetIPGen.runN)r5   r6   r7   Ú__doc__r   r3   r   r   r   r   r9   /   s    r9   c                   @   r   )ÚListTargetIPGenc                 C   r   r   )Útargets©r   rC   r   r   r   r   Z   r   zListTargetIPGen.__init__c              
   Ã   s   �zhd}| j D ]]}zt |¡ | |¡I d H  t d¡I d H  |d7 }W q   Y z"tj|dd�D ]}| t|ƒ¡I d H  t d¡I d H  |d7 }q1W q   Y | |¡I d H  t d¡I d H  |d7 }q|d fW S  ty } z
||fW  Y d }~S d }~ww )Nr   r    Fr:   )	rC   r<   r=   r'   r(   r)   r>   r?   r*   )r   r+   r,   Útargetr@   r2   r   r   r   r3   ]   s8   €




€ÿzListTargetIPGen.runNr4   r   r   r   r   rB   Y   r8   rB   c                   @   r   )ÚListTargetPortGenc                 C   s   || _ i | _d S r   )rC   ÚportsrD   r   r   r   r   ~   s   
zListTargetPortGen.__init__c              
   C   sž   z:| j D ]2}| d¡dkr&| d¡\}}tt|ƒt|ƒƒD ]}d| j|< qqzt|ƒ}d| j|< W q   Y q| jW S  tyN } z|W  Y d }~S d }~ww )Nr   r   r    )rC   r#   r$   r%   r&   rG   r*   )r   rE   r/   r0   r1   r2   r   r   r   r3   ‚   s"   
ÿ€ÿzListTargetPortGen.runNr4   r   r   r   r   rF   }   s    rF   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚSOCKSPortscanc                 C   s^   || _ g | _g | _i | _d| _d| _d| _g | _d | _d | _	d | _
d| _d| _d| _d | _d S )Né
   r    r   )ÚproxyiesÚtarget_gensÚ	port_gensrG   Ú
worker_cntÚmax_retriesÚretries_timeoutÚ_SOCKSPortscan__worker_tasksÚ_SOCKSPortscan__addr_queueÚ_SOCKSPortscan__target_queueÚ_SOCKSPortscan__result_queueÚ_SOCKSPortscan__total_addrsÚ_SOCKSPortscan__total_targetsÚ_SOCKSPortscan__total_finishedÚ%_SOCKSPortscan__addr_gen_finished_evt)r   rJ   r   r   r   r   ˜   s   
zSOCKSPortscan.__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rut|tƒrt|j	t
jt
jt
jt
jfv r_| j ||dd f¡I d H  n|j	t
jfv rs| j ||d |f¡I d H  nq| j ||dd f¡I d H  	 |dkr–| j ||d tdƒf¡I d H  W n! tjy£   Y W d S  ty¸ } z
t|ƒ 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Max tries reached!)rR   ÚgetrN   r(   r)   rO   Úhandle_queueÚ
isinstancer   Úreplyr
   ÚTTL_EXPIREDÚCONN_REFUSEDÚHOST_UNREACHABLEÚCONN_NOT_ALLOWEDrS   r'   ÚADDRESS_TYPE_NOT_SUPPORTEDr*   ÚCancelledErrorÚprint)	r   ÚtempÚipÚportÚclientÚretriesÚ_Úerrr2   r   r   r   Ú	__scanner©   sR   €


€€þß%€ÿzSOCKSPortscan.__scannerc              
   Ã   s  �zp| j D ]}| ¡ }|D ]}d| j|< qq	 | j ¡ I d H }|d u r$nF| jD ]A}|  jd7  _t | j¡}||d _	||d _
d |d _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 )Nr    Tr   )rL   r3   rG   rQ   rX   rU   ÚcopyÚdeepcopyrJ   Úendpoint_ipÚendpoint_portÚtimeoutÚ	only_openr(   ÚQueuer   r   rR   r'   Ú'_SOCKSPortscan__target_gen_finished_evtÚsetr*   rb   )r   Úport_genrG   re   ÚaddrrJ   Úin_qÚout_qÚcommsrf   r2   r   r   r   Ú__gen_targetsÖ   s:   €
ÿ






ì€ÿzSOCKSPortscan.__gen_targetsc              
   Ã   s”   �z1| j D ]}| | j¡I d H \}}|d urt|ƒ |  j|7  _q| j d ¡I d H  | j ¡  W d S  tyI } zt|ƒ W Y d }~d S d }~ww r   )	rK   r3   rQ   rb   rT   r'   rW   rs   r*   )r   Ú
target_genr,   ri   r2   r   r   r   Ú__gen_addrsù   s   €
€ÿzSOCKSPortscan.__gen_addrsc              
   Ã   sb  �z˜t  ¡ | _t  ¡ | _t  ¡ | _t  ¡ | _t  ¡ | _t  |  	¡ ¡ t  |  
¡ ¡ t| jƒD ]}| j t  |  ¡ ¡¡ q.	 | j ¡ I d H \}}}}|  jd7  _|du r]td|||f ƒ | j ¡ du ry| j| jkrytdƒ t| jƒ t| jƒ nq=tt| jƒƒD ]}| j d ¡I d H  q�| jD ]}| ¡  q�W d S  ty° } zt|ƒ W Y d }~d S d }~ww )NTr    z%s:%s -> %szEND!)r(   rq   rQ   rR   rS   ÚEventrW   rr   Úcreate_taskÚ_SOCKSPortscan__gen_addrsÚ_SOCKSPortscan__gen_targetsr%   rM   rP   ÚappendÚ_SOCKSPortscan__scannerrX   rV   rb   Úis_setrU   Úlenr'   Úcancelr*   )r   rh   rd   re   Ústatusri   Úworkerr2   r   r   r   r3     s@   €






ô

ÿ€ÿzSOCKSPortscan.runN)r5   r6   r7   r   r�   r   r~   r3   r   r   r   r   rH   —   s    -#rH   c                  C   s  dd l } | jdd�}|jdddddd	� |jd
td dd� |jddtddd� |jddtddd� |jddddd� |jdddddd	� |jdddd� | ¡ }t d¡ |jdkrat tj	¡ n
|jd krkt d¡ t
 |j¡}t|ƒ}|j|_|j|_|j|_g }|jD ]}zt|d!ƒ}| ¡  |j t|ƒ¡ W q†   | |¡ Y q†t|ƒdkr´|j t|ƒ¡ t|jƒdkrÁtd"ƒ d S g }|jD ]}zt|d!ƒ}| ¡  |j t|ƒ¡ W qÆ   | |¡ Y qÆt|ƒdkrô|j t |ƒ¡ t|jƒdk�rtd#ƒ d S t! "| "¡ ¡ d S )$Nr   zSOCKS/HTTP proxy port scanner)Údescriptionz-pz--portr€   TzCport to scan / port range to scan / port range file. can be stacked)ÚactionÚrequiredÚhelpz	--timeoutzScan retries sleep time)ÚtypeÚdefaultrŠ   z-rz	--retriesr    zRetries for testing the portz-wz--worker-countÚParallelismz-vz	--verboseÚcount)rˆ   rŒ   z-tz--targetz+IP address / IP range (CDIR) / targets fileÚproxiesÚ*zHconnection string(s) of the target proxy. if you want a chain of proxies)ÚnargsrŠ   éd   é   r   z#[-] No suitable targets were found!z![-] No suitable ports were found!)#ÚargparseÚArgumentParserÚadd_argumentr&   Ú
parse_argsr   ÚsetLevelÚverboseÚloggingÚDEBUGr   Ú	from_urlsr�   rH   rg   rN   ro   rO   Úworker_countrM   rE   r!   ÚcloserK   r€   r9   rƒ   rB   rb   re   rL   r   rF   r(   r3   )r”   ÚparserÚargsÚ
proxychainÚscannerÚnotfilerE   r-   r   r   r   Úmain+  s^   







r¤   Ú__main__)r(   r<   rš   rk   Úasysocksr   Úasysocks.clientr   Úasysocks.common.commsr   Úasysocks.protocol.socks5r   r   r   r   r	   r
   r   r   r   r   Úasysocks.common.clienturlr   r   r9   rB   rF   rH   r¤   r5   r   r   r   r   Ú<module>   s&   0!*$ B
ÿ