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