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<  zd}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  zt  | _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 ]}|  qW 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 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 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
