o
    �õ±j‰O  ã                   @   s:  d dl Z d dlZd dlZd dlZd dlZd dlmZ G dd„ dejƒZG dd„ dejƒZ	G dd„ dejƒZ
G d	d
„ d
ejƒZG dd„ deƒZG dd„ deƒ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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G d#d$„ d$ƒZdS )%é    N)ÚSOCKS5Methodc                   @   s   e Zd ZdZdZdZdZdS )ÚSOCKS5ServerStater   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚNEGOTIATIONÚNOT_AUTHENTICATEDÚREQUESTÚRELAYING© r   r   ú‹/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/protocol/socks5.pyr      s
    r   c                   @   ó   e Zd ZdZdZdZdS )ÚSOCKS5Commandr   é   r   N)r   r   r	   ÚCONNECTÚBINDÚUDP_ASSOCIATEr   r   r   r   r      ó    r   c                   @   r   )ÚSOCKS5AddressTyper   r   r   N)r   r   r	   ÚIP_V4Ú
DOMAINNAMEÚIP_V6r   r   r   r   r      r   r   c                   @   s0   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )ÚSOCKS5ReplyTyper   r   r   r   r   é   é   é   é   N)r   r   r	   Ú	SUCCEEDEDÚFAILUREÚCONN_NOT_ALLOWEDÚNETWORK_UNREACHABLEÚHOST_UNREACHABLEÚCONN_REFUSEDÚTTL_EXPIREDÚCOMMAND_NOT_SUPPORTEDÚADDRESS_TYPE_NOT_SUPPORTEDr   r   r   r   r   !   s    r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚSOCKS5ServerErrorReplyc                 C   ó
   || _ d S ©N)Úreply)Úselfr,   r   r   r   Ú__init__.   ó   
zSOCKS5ServerErrorReply.__init__c                 C   s   | j jS r+   )r,   Úname©r-   r   r   r   Ú__str__0   s   zSOCKS5ServerErrorReply.__str__N)r   r   r	   r.   r2   r   r   r   r   r)   -   s    r)   c                   @   s   e Zd ZdS )ÚSOCKS5AuthFailedN)r   r   r	   r   r   r   r   r3   3   s    r3   c                   @   s*   e Zd Zejfdd„Zdd„ Zdd„ ZdS )ÚSOCKS5SocketParserc                 C   r*   r+   ©Úprotocol©r-   r6   r   r   r   r.   7   r/   zSOCKS5SocketParser.__init__c                 C   s   |  |  ||j¡¡S r+   )Ú
from_bytesÚread_socÚsize)r-   ÚsocÚpacket_typer   r   r   Úparse:   s   zSOCKS5SocketParser.parsec                 C   s:   d}	 |  d¡}|dkr	 |S ||7 }t|ƒ|kr	 |S q)Nó    Ti   Ú )ÚrecvÚlen)r-   r;   r:   ÚdataÚtempr   r   r   r9   =   s   
ýùzSOCKS5SocketParser.read_socN)r   r   r	   ÚsocketÚSOCK_STREAMr.   r=   r9   r   r   r   r   r4   6   s    r4   c                   @   s0   e Zd Zejfdd„Zdd„ Zeddd„ƒZdS )	ÚSOCKS5CommandParserc                 C   r*   r+   r5   r7   r   r   r   r.   L   r/   zSOCKS5CommandParser.__init__c                 C   sZ   |j tjkrt |¡S |j tjkr |jtjkrt	 |¡S t
dƒ‚|j tjkr+t |¡S d S )NúNot implemented!)Úcurrent_stater   r
   Ú
SOCKS5NegoÚfrom_bufferr   Úmutual_auth_typer   ÚPLAINÚSOCKS5PlainAuthÚ	Exceptionr   ÚSOCKS5Request)r-   ÚbuffÚsessionr   r   r   r=   O   s   


ÿzSOCKS5CommandParser.parseNc                 Ã   s   �t ƒ ‚r+   )ÚNotImplementedError)ÚreaderrQ   Útimeoutr   r   r   Úfrom_streamreader\   s   €z%SOCKS5CommandParser.from_streamreaderr+   )	r   r   r	   rD   rE   r.   r=   ÚstaticmethodrU   r   r   r   r   rF   I   s
    rF   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚSOCKS5AuthHandlerNc                 C   ó   || _ || _d S r+   )ÚauthtypeÚcreds)r-   rY   rZ   r   r   r   r.   p   ó   
zSOCKS5AuthHandler.__init__c                 C   s˜   | j tjkr>t|tƒstdƒ‚| jd u rdt|j|j	ƒfS |j| jv r5|j	| j|j kr5dt|j|j	ƒfS dt|j|j	ƒfS | j tj
krHtdƒ‚tdƒ‚)NzWrong message/auth type!TFzNot implemented! yetrG   )rY   r   rL   Ú
isinstancerM   rN   rZ   ÚSOCKS5PlainCredentialsÚUNAMEÚPASSWDÚGSSAPI)r-   Úmsgr   r   r   Údo_AUTHt   s   

zSOCKS5AuthHandler.do_AUTHr+   )r   r   r	   r.   rb   r   r   r   r   rW   o   s    
rW   c                   @   s   e Zd Zdd„ ZdS )r]   c                 C   rX   r+   )ÚusernameÚpassword)r-   rc   rd   r   r   r   r.   Š   r[   zSOCKS5PlainCredentials.__init__N)r   r   r	   r.   r   r   r   r   r]   ‰   s    r]   c                   @   s8   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZd	S )
ÚSOCKS5PlainAuthReplyc                 C   s   d | _ d | _d S r+   )ÚVERÚSTATUSr1   r   r   r   r.   �   r[   zSOCKS5PlainAuthReply.__init__c                 Ã   óT   �t ƒ }|  d¡I d H }tj|ddd�|_|  d¡I d H }ttj|ddd�ƒ|_|S ©Nr   ÚbigF©Ú	byteorderÚsigned)re   ÚreadÚintr8   rf   r   rg   ©rS   ÚrepÚtr   r   r   rU   “   ó   €z&SOCKS5PlainAuthReply.from_streamreaderc                 C   ó   t  t | ¡¡S r+   )re   rJ   ÚioÚBytesIO)rB   r   r   r   r8   �   ó   zSOCKS5PlainAuthReply.from_bytesc                 C   ó>   t ƒ }tj|  d¡ddd�|_ttj|  d¡ddd�ƒ|_|S ri   )re   ro   r8   rn   rf   r   rg   ©rP   rq   r   r   r   rJ   ¡   ó   z SOCKS5PlainAuthReply.from_bufferN)r   r   r	   r.   rV   rU   r8   rJ   r   r   r   r   re   Ž   s    
	
re   c                   @   óL   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZed	d
„ ƒZdd„ Z	dS )rM   c                 C   s"   d | _ d | _d | _d | _d | _d S r+   )rf   ÚULENr^   ÚPLENr_   r1   r   r   r   r.   ©   s
   
zSOCKS5PlainAuth.__init__c                 Ã   sª   �t ƒ }|  d¡I d H }tj|ddd�|_|  d¡I d H }tj|ddd�|_|  |j¡I d H }| ¡ |_|  d¡I d H }tj|ddd�|_|  |j¡I d H }| ¡ |_	|S ri   )
rM   rn   ro   r8   rf   r|   Údecoder^   r}   r_   )rS   Úauthrr   r   r   r   rU   °   s   €

z!SOCKS5PlainAuth.from_streamreaderc                 C   rt   r+   )rM   rJ   ru   rv   ©Úbbuffr   r   r   r8   À   rw   zSOCKS5PlainAuth.from_bytesc                 C   sv   t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_|  |j¡ ¡ |_tj|  d¡ddd�|_|  |j¡ ¡ |_	|S ri   )
rM   ro   r8   rn   rf   r|   r~   r^   r}   r_   )rP   r   r   r   r   rJ   Ä   s   zSOCKS5PlainAuth.from_bufferc                 C   s0   t ƒ }d|_t| ƒ|_| |_t|ƒ|_||_|S )Nr   )rM   rf   rA   r|   r^   r}   r_   )rc   rd   r   r   r   r   Ú	constructÏ   s   

zSOCKS5PlainAuth.constructc                 C   s^   | j jdddd�}|| jjdddd�7 }|| j ¡ 7 }|| jjdddd�7 }|| j ¡ 7 }|S ri   )rf   Úto_bytesr|   r^   Úencoder}   r_   ©r-   rr   r   r   r   rƒ   Ú   s   zSOCKS5PlainAuth.to_bytesN©
r   r   r	   r.   rV   rU   r8   rJ   r‚   rƒ   r   r   r   r   rM   ¨   s    





rM   c                   @   r{   )rI   c                 C   s   d| _ d | _d | _d S ©Nr   )rf   ÚNMETHODSÚMETHODSr1   r   r   r   r.   ä   s   
zSOCKS5Nego.__init__c              	   Ã   s’   �t ƒ }|  d¡I d H }tj|ddd�|_|  d¡I d H }tj|ddd�|_g |_t|jƒD ]}|  d¡I d H }|j t	tj|ddd�ƒ¡ q.|S ri   )
rI   Úreadexactlyro   r8   rf   rˆ   r‰   ÚrangeÚappendr   )rS   Únegorr   Ú_r   r   r   rU   é   s   €zSOCKS5Nego.from_streamreaderc                 C   rt   r+   )rI   rJ   ru   rv   r€   r   r   r   r8   ÷   rw   zSOCKS5Nego.from_bytesc              	   C   sr   t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_g |_t|jƒD ]}|j t	tj|  d¡ddd�ƒ¡ q#|S ri   )
rI   ro   r8   rn   rf   rˆ   r‰   r‹   rŒ   r   )rP   r�   rŽ   r   r   r   rJ   û   s   $zSOCKS5Nego.from_bufferc                 C   s*   t | tƒs| g} tƒ }t| ƒ|_| |_|S r+   )r\   ÚlistrI   rA   rˆ   r‰   )Úmethodsr�   r   r   r   Úfrom_methods  s   

zSOCKS5Nego.from_methodsc                 C   sN   | j jdddd�}|| jjdddd�7 }| jD ]}||jjdddd�7 }q|S ri   )rf   rƒ   rˆ   r‰   Úvalue)r-   rr   Úmethodr   r   r   rƒ     s
   
zSOCKS5Nego.to_bytesN)
r   r   r	   r.   rV   rU   r8   rJ   r‘   rƒ   r   r   r   r   rI   ã   s    


	
rI   c                   @   sn   e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZed	d
„ ƒZedd„ ƒZ	edd„ ƒZ
eddd„ƒZdd„ ZdS )ÚSOCKS5NegoReplyc                 C   s   d| _ d | _d S r‡   ©rf   ÚMETHODr1   r   r   r   r.     r[   zSOCKS5NegoReply.__init__c                 C   s$   d}|d| j  7 }|d| j 7 }|S )Nz== SOCKS5NegoReply ==
z	VER: %s
zMETHOD: %s
r•   r…   r   r   r   Ú__repr__  s   zSOCKS5NegoReply.__repr__c                 C   s@   d}d}	 |   d¡}|dkrn||7 }t|ƒ|krnqt |¡S )Nr>   r   Té   )r@   rA   r”   r8   )r;   rB   Ú
total_sizerC   r   r   r   Úfrom_socket   s   
ú
zSOCKS5NegoReply.from_socketc                 Ã   rh   ri   )r”   rŠ   ro   r8   rf   r   r–   rp   r   r   r   rU   .  rs   z!SOCKS5NegoReply.from_streamreaderc                 C   rt   r+   )r”   rJ   ru   rv   r€   r   r   r   r8   8  rw   zSOCKS5NegoReply.from_bytesc                 C   rx   ri   )r”   ro   r8   rn   rf   r   r–   ry   r   r   r   rJ   <  rz   zSOCKS5NegoReply.from_bufferc                 C   s   t ƒ }d|_| |_|S r‡   ©r”   rf   r–   )r“   rq   r   r   r   r‚   C  ó   zSOCKS5NegoReply.constructr   c                 C   s   t ƒ }||_| |_|S r+   r›   )r“   Úverrq   r   r   r   Úconstruct_authJ  rœ   zSOCKS5NegoReply.construct_authc                 C   s.   | j jdddd�}|| jjjdddd�7 }|S ri   )rf   rƒ   r–   r’   r…   r   r   r   rƒ   R  s   zSOCKS5NegoReply.to_bytesN)r   )r   r   r	   r.   r—   rV   rš   rU   r8   rJ   r‚   rž   rƒ   r   r   r   r   r”     s     

	


r”   c                   @   sX   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZed	d
„ ƒZedd„ ƒZ	dd„ Z
dS )rO   c                 C   s*   d| _ tj| _d| _d | _d | _d | _d S ©Nr   r   )rf   r   r   ÚCMDÚRSVÚATYPÚDST_ADDRÚDST_PORTr1   r   r   r   r.   Y  s   
zSOCKS5Request.__init__c                 Ã   óX  �t ƒ }|  d¡I d H }tj|ddd�|_|  d¡I d H }ttj|ddd�ƒ|_|  d¡I d H }tj|ddd�|_|  d¡I d H }ttj|ddd�ƒ|_	|j	tj
kra|  d¡I d H }t |¡|_n8|j	tjkrv|  d¡I d H }t |¡|_n#|j	tjkr™|  d¡I d H }tj|ddd�}|  |¡I d H }| ¡ |_|  d¡I d H }tj|ddd�|_|S ©Nr   rj   Frk   r   é   r   )rO   rŠ   ro   r8   rf   r   r    r¡   r   r¢   r   Ú	ipaddressÚIPv4Addressr£   r   ÚIPv6Addressr   r~   r¤   )rS   Úreqrr   Úlengthr   r   r   rU   a  s0   €
zSOCKS5Request.from_streamreaderc                 C   rt   r+   )rO   rJ   ru   rv   r€   r   r   r   r8   ~  rw   zSOCKS5Request.from_bytesc                 C   óü   t ƒ }tj|  d¡ddd�|_ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_ttj|  d¡ddd�ƒ|_	|j	tj
krGt |  d¡¡|_n)|j	tjkrWt |  d¡¡|_n|j	tjkrptj|  d¡ddd�}|  |¡ ¡ |_tj|  d¡ddd�|_|S r¦   )rO   ro   r8   rn   rf   r   r    r¡   r   r¢   r   r¨   r©   r£   r   rª   r   r~   r¤   )rP   r«   r¬   r   r   r   rJ   ‚  s   zSOCKS5Request.from_bufferc                 C   sˆ   t ƒ }tj|_| jdu rtj|_t| jtj	ƒr t
j|_| j|_nt| jtjƒr0t
j|_| j|_nt| jtƒr>t
j|_| j|_| j|_|S )NT)rO   r   r   r    Úis_bindr   r\   Úendpoint_ipr¨   r©   r   r   r¢   r£   rª   r   Ústrr   Úendpoint_portr¤   )Útargetr«   r   r   r   Úfrom_target”  s   


zSOCKS5Request.from_targetc                 C   ór   t ƒ }d|_| |_d|_t|tjƒrtj|_	||_
nt|tjƒr(tj|_	||_
nt|tƒr4tj|_	||_
||_|S rŸ   )rO   rf   r    r¡   r\   r¨   r©   r   r   r¢   r£   rª   r   r°   r   r¤   )ÚcmdÚaddressÚportr«   r   r   r   r‚   ¨  ó   
zSOCKS5Request.constructc                 C   ó´   | j jdddd�}|| jjjdddd�7 }|| jjdddd�7 }|| jjjdddd�7 }| jtjkrG|t| j	ƒjdddd�7 }|| j	 
¡ 7 }n|| j	j7 }|| jjdddd�7 }|S ©Nr   rj   Frk   r   )rf   rƒ   r    r’   r¡   r¢   r   r   rA   r£   r„   Úpackedr¤   r…   r   r   r   rƒ   »  ó   zSOCKS5Request.to_bytesN)r   r   r	   r.   rV   rU   r8   rJ   r³   r‚   rƒ   r   r   r   r   rO   X  s    




rO   c                   @   s`   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZed	d
„ ƒZedd„ ƒZ	dd„ Z
dd„ ZdS )ÚSOCKS5Replyc                 C   s(   d| _ d | _d| _d | _d | _d | _d S rŸ   )rf   ÚREPr¡   r¢   Ú	BIND_ADDRÚ	BIND_PORTr1   r   r   r   r.   Ê  ó   
zSOCKS5Reply.__init__c                 C   sŠ   d}d}	 |   d¡}|dkrn1||7 }t|ƒdkr8t|d ƒ}|tjkr&d}|tjkr-d}|tjkr8d|d  }t|ƒ|kr?nqt |¡S )	Nr>   r˜   Tr   r   é
   é   r   )r@   rA   r   r   r   r   r½   r8   )r;   rB   r™   rC   Úrtr   r   r   rš   Ò  s&   



ï
zSOCKS5Reply.from_socketc                 Ã   r¥   r¦   )r½   rŠ   ro   r8   rf   r   r¾   r¡   r   r¢   r   r¨   r©   r¿   r   rª   r   r~   rÀ   ©rS   rq   rr   r¬   r   r   r   rU   ë  s0   €
zSOCKS5Reply.from_streamreaderc                 C   rt   r+   )r½   rJ   ru   rv   r€   r   r   r   r8     rw   zSOCKS5Reply.from_bytesc                 C   r­   r¦   )r½   ro   r8   rn   rf   r   r¾   r¡   r   r¢   r   r¨   r©   r¿   r   rª   r   r~   rÀ   ©rP   rq   r¬   r   r   r   rJ   
  s   zSOCKS5Reply.from_bufferc                 C   r´   rŸ   )r½   rf   r¾   r¡   r\   r¨   r©   r   r   r¢   r£   rª   r   r°   r   r¤   )r,   r¶   r·   rq   r   r   r   r‚     r¸   zSOCKS5Reply.constructc                 C   r¹   rº   )rf   rƒ   r¾   r’   r¡   r¢   r   r   rA   r£   r„   r»   r¤   r…   r   r   r   rƒ   1  r¼   zSOCKS5Reply.to_bytesc                 C   sP   d}|dt | jƒ 7 }|dt | jƒ 7 }|dt | jƒ 7 }|dt | jƒ 7 }|S )Nz== SOCKS5Reply ==
z	REP: %s
z
ATYP: %s
zBIND_ADDR: %s
zBIND_PORT: %s
)Úreprr¾   r¢   r¿   rÀ   r…   r   r   r   r—   >  s   zSOCKS5Reply.__repr__N)r   r   r	   r.   rV   rš   rU   r8   rJ   r‚   rƒ   r—   r   r   r   r   r½   É  s    




r½   c                   @   sN   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZedd
d„ƒZdd„ Z	dS )Ú	SOCKS5UDPc                 C   s(   d | _ d | _d | _d | _d | _d | _d S r+   )r¡   ÚFRAGr¢   r£   r¤   ÚDATAr1   r   r   r   r.   I  rÁ   zSOCKS5UDP.__init__c                 Ã   s6  �t ƒ }|  d¡I d H }tj|ddd�|_|  d¡I d H }ttj|ddd�ƒ|_|  d¡I d H }ttj|ddd�ƒ|_|jtj	krP|  d¡I d H }t
 |¡|_n8|jtjkre|  d¡I d H }t
 |¡|_n#|jtjkrˆ|  d¡I d H }tj|ddd�}|  |¡I d H }| ¡ |_|  d¡I d H }tj|ddd�|_|S ©Nr   rj   Frk   r   r   r§   )rÈ   rŠ   ro   r8   r¡   r   rÉ   r   r¢   r   r¨   r©   r£   r   rª   r   r~   r¤   rÅ   r   r   r   rU   Q  s,   €
zSOCKS5UDP.from_streamreaderc                 C   rt   r+   )rÈ   rJ   ru   rv   r€   r   r   r   r8   k  rw   zSOCKS5UDP.from_bytesc                 C   sä   t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_t|  d¡ddd�|_|jtjkr6t	 
|  d¡¡|_n)|jtjkrFt	 |  d¡¡|_n|jtjkr_tj|  d¡ddd�}|  |¡ ¡ |_tj|  d¡ddd�|_|  ¡ |_d S rË   )rÈ   ro   r8   rn   r¡   rÉ   r   r¢   r   r¨   r©   r£   r   rª   r   r~   r¤   rÊ   rÆ   r   r   r   rJ   o  s   zSOCKS5UDP.from_bufferr   c                 C   sr   t ƒ }d|_||_t| tjƒrtj|_| |_	nt| tj
ƒr%tj|_| |_	nt| tƒr1tj|_| |_	||_||_|S )Nr   )rO   r¡   rÉ   r\   r¨   r©   r   r   r¢   r£   rª   r   r°   r   r¤   rÊ   )r¶   r·   rB   Úfragr«   r   r   r   r‚   �  s   
zSOCKS5UDP.constructc                 C   s¨   | j jdddd�}|| jjjdddd�7 }|| jjjdddd�7 }| jtjkr<|t| jƒjdddd�7 }|| j 	¡ 7 }n|| jj
7 }|| jjdddd�7 }|| j7 }|S )Nr   rj   Frk   r   )r¡   rƒ   rÉ   r’   r¢   r   r   rA   r£   r„   r»   r¤   rÊ   r…   r   r   r   rƒ   ”  s   
zSOCKS5UDP.to_bytesN)r   r†   r   r   r   r   rÈ   H  s    


rÈ   )ru   Úenumr¨   rD   ÚasyncioÚasysocks.common.constantsr   ÚEnumr   r   r   r   rN   r)   r3   r4   rF   rW   r]   re   rM   rI   r”   rO   r½   rÈ   r   r   r   r   Ú<module>   s.   &;2Cq