o
    �õ±jI  ã                   @   sf   d dl Z d dlZd dlZd dlZd dlZd dlZdZG dd„ dejƒZG dd„ dƒZ	G dd„ dƒZ
dS )	é    Néÿ   c                   @   s$   e Zd ZdZdZdZdZdZdZdS )ÚSOCKS4ACDCodeé   é   éZ   é[   é\   é]   N)	Ú__name__Ú
__module__Ú__qualname__ÚREQ_CONNECTÚREQ_BINDÚREP_GRANTEDÚ
REP_FAILEDÚREP_FAILED_NOCONNÚREP_FAILED_USRID_MISMATCH© r   r   úŒ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/protocol/socks4a.pyr      s    r   c                   @   sN   e Zd Zdd„ Zedd„ ƒZeddd„ƒZedd	„ ƒZed
d„ ƒZdd„ Z	dS )ÚSOCKS4ARequestc                 C   s*   d| _ tj| _d | _d | _d | _d | _d S )Né   )ÚVNr   r   ÚCDÚDSTPORTÚDSTIPÚUSERIDÚDOMAIN©Úselfr   r   r   Ú__init__   s   
zSOCKS4ARequest.__init__c                 C   ó   t  t | ¡¡S ©N)r   Úfrom_bufferÚioÚBytesIO©Údatar   r   r   Ú
from_bytes   ó   zSOCKS4ARequest.from_bytesNc              
   Ã   sÒ   �zQd}t j|  d¡|d�I d H }||7 }t j|  d¡|d�I d H }||7 }d}|dd… dkr2d}td|ƒD ]}t j|  d	¡|d�I d H }||7 }q7t |¡d fW S  tyh } z
d |fW  Y d }~S d }~ww )
Nó    r   ©Útimeoutr   r   é   s      r   ó    )ÚasyncioÚwait_forÚreadexactlyÚrangeÚ	readuntilr   r'   Ú	Exception)Úreaderr+   ÚbuffÚtÚrÚ_Úer   r   r   Úfrom_streamreader#   s$   €
€ÿz SOCKS4ARequest.from_streamreaderc                 C   sä   t ƒ }tj|  d¡ddd�|_ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_t 	|  d¡¡|_
d|_ttƒD ]}|  d¡}|dkrF n| j|7  _q9t|j
ƒ d	¡rpttƒD ]}|  d¡}|dkrh |S | j|7  _qZ|S )
Nr   ÚbigF©Ú	byteorderÚsignedr   r   r)   r   z0.0.0.)r   Úintr'   Úreadr   r   r   r   Ú	ipaddressÚIPv4Addressr   r   r1   ÚSOCKS4_USERID_MAC_LENÚstrÚ
startswithr   )r5   Úor8   Úxr   r   r   r"   6   s&   

ÿzSOCKS4ARequest.from_bufferc                 C   s–   t ƒ }| jdu rtj | j|_t| jtj	ƒr| j|_
nz	t | j¡|_
W n   t d¡|_
t| jƒ|_Y | j|_| jd u rIt d¡ ¡  d¡|_|S )NTz0.0.0.3r   Úascii)r   Úis_bindr   r   Úendpoint_portr   Ú
isinstanceÚendpoint_iprA   rB   r   Ú
ip_addressrD   r   Úuseridr   ÚosÚurandomÚhexÚencode)ÚtargetrF   r   r   r   Úfrom_targetL   s   


zSOCKS4ARequest.from_targetc                 C   s‚   | j jdddd�}|| jjjdddd�7 }|| jjdddd�7 }|| jj7 }|| j7 }|d7 }| jd ur?|| j 	¡ 7 }|d7 }|S )Nr   r;   Fr<   r   r-   )
r   Úto_bytesr   Úvaluer   r   Úpackedr   r   rR   ©r   r6   r   r   r   rU   `   s   

zSOCKS4ARequest.to_bytesr!   )
r
   r   r   r   Ústaticmethodr'   r:   r"   rT   rU   r   r   r   r   r      s    


r   c                   @   sB   e Zd Zdd„ Zedd„ ƒZeddd„ƒZedd	„ ƒZd
d„ ZdS )ÚSOCKS4AReplyc                 C   s   d| _ d | _d | _d | _d S )Nr   )r   r   r   r   r   r   r   r   r   m   s   
zSOCKS4AReply.__init__c                 C   r    r!   )rZ   r"   r#   r$   r%   r   r   r   r'   s   r(   zSOCKS4AReply.from_bytesNc              
   Ã   sZ   �zt j|  d¡|d�I d H }t |¡d fW S  ty, } z
d |fW  Y d }~S d }~ww )Né   r*   )r.   r/   r0   rZ   r'   r3   )r4   r+   r6   r9   r   r   r   r:   w   s   €€ÿzSOCKS4AReply.from_streamreaderc                 C   sh   t ƒ }tj|  d¡ddd�|_ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_t 	|  d¡¡|_
|S )Nr   r;   Fr<   r   r   )rZ   r?   r'   r@   r   r   r   r   rA   rB   r   )r5   rF   r   r   r   r"      s   zSOCKS4AReply.from_bufferc                 C   sP   | j jdddd�}|| jjjdddd�7 }|| jjdddd�7 }|| jj7 }|S )Nr   r;   Fr<   r   )r   rU   r   rV   r   r   rW   rX   r   r   r   rU   ˆ   s
   zSOCKS4AReply.to_bytesr!   )	r
   r   r   r   rY   r'   r:   r"   rU   r   r   r   r   rZ   l   s    

rZ   )r#   rO   ÚenumrA   Úsocketr.   rC   ÚEnumr   r   rZ   r   r   r   r   Ú<module>   s   	V