o
    �õ±jÒ  ã                   @   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 )ÚSOCKS4CDCodeé   é   é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/socks4.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 )ÚSOCKS4Requestc                 C   s$   d| _ tj| _d | _d | _d | _d S )Né   )ÚVNr   r   ÚCDÚDSTPORTÚDSTIPÚUSERID©Úselfr   r   r   Ú__init__   s
   
zSOCKS4Request.__init__c                 C   ó   t  t | ¡¡S ©N)r   Úfrom_bufferÚioÚBytesIO©Údatar   r   r   Ú
from_bytes   ó   zSOCKS4Request.from_bytesNc              
   Ã   óZ   �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ó    ©Útimeout)ÚasyncioÚwait_forÚ	readuntilr   r&   Ú	Exception©Úreaderr+   ÚtÚer   r   r   Úfrom_streamreader"   ó   €€ÿzSOCKS4Request.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rG |S | j|7  _q9|S )	Nr   ÚbigF©Ú	byteorderÚsignedr   r   ó    r   )r   Úintr&   Úreadr   r   r   r   Ú	ipaddressÚIPv4Addressr   r   ÚrangeÚSOCKS4_USERID_MAC_LEN)ÚbuffÚoÚ_Úxr   r   r   r!   *   s   
ÿzSOCKS4Request.from_bufferc                 C   sp   t ƒ }| jdu rtj | j|_t| jtj	ƒr| j|_
nt | j¡|_
| j|_| jd u r6t d¡ ¡  d¡|_|S )NTr   Úascii)r   Úis_bindr   r   Úendpoint_portr   Ú
isinstanceÚendpoint_ipr=   r>   r   Ú
ip_addressÚuseridr   ÚosÚurandomÚhexÚencode)ÚtargetrB   r   r   r   Úfrom_target9   s   


zSOCKS4Request.from_targetc                 C   sb   | 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 }|S )Nr   r6   Fr7   r   r)   )r   Úto_bytesr   Úvaluer   r   Úpackedr   ©r   r2   r   r   r   rR   I   s   
zSOCKS4Request.to_bytesr    )
r
   r   r   r   Ústaticmethodr&   r4   r!   rQ   rR   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 )ÚSOCKS4Replyc                 C   s   d| _ d | _d | _d | _d S )Nr   )r   r   r   r   r   r   r   r   r   S   s   
zSOCKS4Reply.__init__c                 C   r   r    )rW   r!   r"   r#   r$   r   r   r   r&   Y   r'   zSOCKS4Reply.from_bytesNc              
   Ã   r(   )Né   r*   )r,   r-   ÚreadexactlyrW   r&   r/   r0   r   r   r   r4   ]   r5   zSOCKS4Reply.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   r6   Fr7   r   r   )rW   r;   r&   r<   r   r   r   r   r=   r>   r   )rA   rB   r   r   r   r!   e   s   zSOCKS4Reply.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   r6   Fr7   r   )r   rR   r   rS   r   r   rT   rU   r   r   r   rR   n   s
   zSOCKS4Reply.to_bytesr    )	r
   r   r   r   rV   r&   r4   r!   rR   r   r   r   r   rW   R   s    

rW   )r"   rL   Úenumr=   Úsocketr,   r@   ÚEnumr   r   rW   r   r   r   r   Ú<module>   s   	<