o
    �õ±jÂ  ã                   @   s\  d dl mZmZ d dlZd dlmZ d dlmZmZm	Z	 d dl
mZ dd„ Zdeegfd	egfd	egfd
egfdegfdegfdegfdegfdegfdegfdegfde	gfdegfdegfdœZdefdefdefdefdefdefdœZejdejdejdiZG dd„ dƒZedkrªdZdZdZeeƒZe e¡Zedƒ eD ]	Zeejƒ q¢dS dS )é    )ÚurlparseÚparse_qsN)ÚSocksCredential)ÚSocksServerVersionÚSocksProtocolÚSOCKS5Method)ÚSocksTargetc                 C   s   t | ƒ ¡ S ©N)ÚstrÚupper)Úx© r   úŒ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/common/clienturl.pyÚstru   s   r   ÚversionÚ	server_ipÚserver_portÚis_bindÚprotoÚtimeoutÚendpoint_timeoutÚbuffer_sizeÚusernameÚpasswordÚauthtypeÚuseridÚagentid)ÚtypeÚhostÚserverÚportÚbindr   r   ÚetimeoutÚbsizeÚuserÚpassr   r   r   )Úisbindr   r   Ú
buffersizer   r   é   c                   @   sR   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zedd
d„ƒZedd„ ƒZ	edd„ ƒZ
d	S )ÚSocksClientURLc                 C   s`   d | _ d | _d| _d| _tj| _d| _d| _d | _	d| _
d | _d | _d | _d | _d | _d | _d S )Né8  Fé
   i   )r   r   r   r   r   ÚTCPr   r   r   Ússl_ctxÚwsnet_reuseÚendpoint_ipÚendpoint_portr   r   r   r   ©Úselfr   r   r   Ú__init__0   s   
zSocksClientURL.__init__c                 C   s(   | j d u rd S tƒ }| j |_ | j|_|S r	   )r   r   r   )r2   Úcredsr   r   r   Ú	get_credsD   s   
zSocksClientURL.get_credsc                 C   s|   t ƒ }| j|_| j|_| j|_| j|_| j|_| j|_| j|_| j|_| j	|_	| j
|_
| j|_|  ¡ |_| j|_| j|_|S r	   )r   r   r   r   r   r   r   r   r/   r0   r   r-   r5   Ú
credentialr   r.   )r2   Útargetr   r   r   Ú
get_targetL   s    
zSocksClientURL.get_targetc                 C   s^   | j tjkr| jd u rtdƒ‚| jd u rtdƒ‚| jdkr$td| j ƒ‚| jd u r-tdƒ‚d S )NzSOCKS server IP is missing!zSOCKS server port is missing!r   zbuffer_size is too low! %szEndpoint IP address is missing!)r   r   ÚWSNETr   Ú	Exceptionr   r   r/   r1   r   r   r   Úsanity_check^   s   



ÿzSocksClientURL.sanity_checkNc                 C   st   g }d}d }| d d d… D ]%}t  |¡ ¡ }|du r#||_||_d}n|j|_|j|_|}| |¡ q|d d d… S )NTéÿÿÿÿF)r)   Úfrom_urlr8   r/   r0   r   r   Úappend)Úurlsr/   r0   Ú	proxylistÚfirstÚ
prevtargetÚurlÚresr   r   r   Ú	from_urlsl   s   zSocksClientURL.from_urlsc                 C   sn  t ƒ }t| ƒ}t|j ¡ ƒ|_|j|_|jd urt	|jƒ|_
nY|jtjkr)d|_
nO|jtjkr3d|_
nE|jtjkr=d|_
n;|jtjkrGd|_
n1|jtjkrQd|_
n'|jtjkr[d|_
n|jtjkred|_
n|jtjkrod|_
n	|jtjkrxd |_
|j|_|j|_|jtv rŠt ¡ |_|jd urµt|jƒ}|D ]}|tv r´t| d }t| d || d ƒ}t|||ƒ q–|S )Ni�  iû   r*   r   r(   )r)   r   r   Úschemer   r   Úhostnamer   r    Úintr   ÚHTTPÚHTTPSÚSOCKS5ÚSOCKS5SÚSOCKS4ÚSOCKS4SÚSOCKS4AÚSOCKS4ASr9   r   r   ÚsockssslversionsÚsslÚcreate_default_contextr-   Úqueryr   Úclienturl_url2varÚsetattr)Úurl_strrD   Úurl_erT   ÚkÚpnameÚparamr   r   r   r=      sJ   




€zSocksClientURL.from_urlc                 C   sR  t ƒ }t| ƒ}|j|_|jrt|jƒ|_|jdurât|jƒ}dg}ddi}|D ]7}| 	d¡r^zt|d ƒ |d |vrJd||d < | 
t|d ƒ¡ W q' ty] } zW Y d}~q'd}~ww q't|ƒt|ƒkrktdƒ‚| ¡  d}|}	|ddd… D ]g}
t ƒ }|du rˆd	}|}n
|	j|_|	j|_|}	d
|
 }|
dkrœd}|D ]<}| 	|¡rÚd}|
dkr­d}||d… tv rÚ|| d }t||d…  d D ]}||ƒ}qÅt|t||d…  d |ƒ qž||t|
ƒ< qzt|ƒdkrù|D ]}|| jtv r÷tdƒ‚qên|d jtv �rt ¡ |d _|D ]	}||  ¡  �q
g }|D ]}
| 
|t|
ƒ  ¡ ¡ �q|S )z

		Nr   Ú0Úproxyé   z,proxyies are not in sequential order! ERROR!Tr<   Fzproxy%sé   r(   zCSSL in proxy chaining not supported! That would be a lot of work...)r)   r   rG   r/   r    rH   r0   rT   r   Ú
startswithr>   r:   ÚlenÚsortr   r   Úclienturl_param2varrV   r
   r   rQ   rR   rS   r-   r;   r8   )rW   Ú	lastproxyrC   rT   ÚproxycountsÚ	proxynumsrY   ÚeÚ	firstiterÚ	prevproxyÚiÚpdataÚstartstringÚstartposÚdataÚcÚtargetsr   r   r   Úfrom_params«   sˆ   


€€þú

ý€ÿÿzSocksClientURL.from_params)NN)Ú__name__Ú
__module__Ú__qualname__r3   r5   r8   r;   ÚstaticmethodrE   r=   rq   r   r   r   r   r)   /   s    
+r)   Ú__main__zIhttp://alma.com:80/haha?proxytype=socks5&proxyport=66&proxyhost=127.0.0.1z‚http://alma.com:80/haha?proxytype=socks5&proxyport=66&proxyhost=127.0.0.1&proxy1type=socks4&proxy1port=9876&proxy1host=255.255.0.0z»http://alma.com:80/haha?proxytype=socks5&proxyport=66&proxyhost=127.0.0.1&proxy2type=socks4&proxy2port=9876&proxy2host=255.255.0.0&proxy1type=socks5&proxy1port=6666&proxy1host=127.255.0.0Úaaaaaaaaaaaaaaaaaaaa)Úurllib.parser   r   rR   Úasysocks.common.credentialsr   Úasysocks.common.constantsr   r   r   Úasysocks.common.targetr   r   r
   rH   Úboolrc   rU   rL   rN   rJ   rQ   r)   rr   rC   Úorq   rD   Úprintr7   Ú__dict__r   r   r   r   Ú<module>   sZ   
òú
ý Q
ô