
    i%                        d dl Z d dlZd dlZd dlmZmZ d dlmZmZ ddl	m
Z
 ddlmZ d xZxZZdZ G d	 d
e j                  Z G d de j                  Z G d de j                  Z G d de j                  Zej        dej        dej        dej        dej        dej        dej        dej        dej        di	Ze G d d                      Z e G d d                      Z!e G d d                      Z"e G d  d!                      Z#e G d" d#                      Z$e G d$ d%                      Z% G d& d'          Z&e G d( d)                      Z'e G d* d+                      Z(e G d, d-                      Z)e G d. d/                      Z*e G d0 d1                      Z+e G d2 d3                      Z,ee e"e$f         Z-ee!e#e%f         Z.ee&e'e(e*e)e+e,f         Z/ G d4 d5          Z0dS )6    N)OptionalUnion)	dataclassfield   )
ReplyError   )is_ip_address   c                       e Zd ZdZdZdZdZdS )
AuthMethodr   r   r	      N)__name__
__module____qualname__	ANONYMOUSGSSAPIUSERNAME_PASSWORDNO_ACCEPTABLE     e/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/python_socks/_protocols/socks5.pyr   r      s#        IFMMMr   r   c                   6    e Zd ZdZdZdZedefd            ZdS )AddressTyper         verc                 T    |dk    r| j         S |dk    r| j        S t          d          )Nr      zInvalid IP version)IPV4IPV6
ValueError)clsr   s     r   from_ip_verzAddressType.from_ip_ver   s1    !888O!888O-...r   N)	r   r   r   r    DOMAINr!   classmethodintr$   r   r   r   r   r      sH        DFD/c / / / [/ / /r   r   c                       e Zd ZdZdZdZdS )Commandr   r	   r   N)r   r   r   CONNECTBINDUDP_ASSOCIATEr   r   r   r)   r)   %   s        GDMMMr   r)   c                   2    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )	ReplyCoder   r   r	   r   r   r   r         N)r   r   r   	SUCCEEDEDGENERAL_FAILURECONNECTION_NOT_ALLOWEDNETWORK_UNREACHABLEHOST_UNREACHABLECONNECTION_REFUSEDTTL_EXPIREDCOMMAND_NOT_SUPPORTEDADDRESS_TYPE_NOT_SUPPORTEDr   r   r   r.   r.   +   sC        IO!K !%r   r.   zRequest grantedzGeneral SOCKS server failurez!Connection not allowed by rulesetzNetwork unreachablezHost unreachablez&Connection refused by destination hostzTTL expiredz'Command not supported or protocol errorzAddress type not supportedc                   p    e Zd ZU ee         ed<   ee         ed<    ed          Zeed<   d Z	de
fdZd	S )
AuthMethodsRequestusernamepasswordF)initmethodsc                     t          t          j        g          }| j        r&| j        r|                    t          j                   || _        d S N)	bytearrayr   r   r<   r=   appendr   r?   )selfr?   s     r   __post_init__z AuthMethodsRequest.__post_init__J   sH    Z1233= 	9T] 	9NN:7888r   returnc                 b    t          t          t          | j                  g          | j        z   S rA   )bytes	SOCKS_VERlenr?   rD   s    r   dumpszAuthMethodsRequest.dumpsR   s&    iT\!2!2344t|CCr   N)r   r   r   r   str__annotations__r   r?   rB   rE   rH   rL   r   r   r   r;   r;   D   s         smsmE***GY***  Du D D D D D Dr   r;   c                   T    e Zd ZU dZeed<   eed<   defdZe	de
dd fd            Zd	S )
AuthMethodReplyr	   r   methodrequestc                 P    | j         |j        vrt          d| j                    d S )Nz(Unexpected SOCKS authentication method: )rQ   r?   r   rD   rR   s     r   validatezAuthMethodReply.validate]   s2    ;go--UUUVVV .-r   datarF   c                 n   t          |          | j        k    rt          d          |d         }|t          k    rt          d|           	 t	          |d                   }n'# t
          $ r t          d|d         d          w xY w|t          j        k    rt          d           | ||          S )	Nz%Malformed authentication method replyr   !Unexpected SOCKS version number: r   zInvalid authentication method: #02Xz1No acceptable authentication methods were offered)r   rQ   )rJ   SIZEr   rI   r   r"   r   )r#   rV   r   rQ   s       r   loadszAuthMethodReply.loadsa   s    t99  DEEE1g)FFFGGG	OQ((FF 	O 	O 	OMtAwMMMNNN	O Z---PQQQss6****s   A$ $$BN)r   r   r   rZ   r'   rN   r   r;   rU   r&   rH   r[   r   r   r   rP   rP   V   s         D	HHHW 2 W W W W + +#4 + + + [+ + +r   rP   c                   4    e Zd ZU dZeed<   eed<   defdZdS )AuthRequestr   r<   r=   rF   c                    t                      }|                    | j                   |                    t          | j                             || j                            d          z  }|                    t          | j                             || j                            d          z  }t          |          S )Nascii)rB   rC   VERrJ   r<   encoder=   rH   rD   rV   s     r   rL   zAuthRequest.dumps|   s    {{DHC&&'''$$W---C&&'''$$W---T{{r   N)r   r   r   r`   rM   rN   rH   rL   r   r   r   r]   r]   u   sH         
CMMMMMMu      r   r]   c                   H    e Zd ZU dZeed<   eed<   ededd fd            ZdS )	AuthReplyr	   r   statusrV   rF   c                     t          |          | j        k    rt          d          |d         }|t          j        k    rt          d          |d         }|t
          k    rt          d           | ||          S )NzMalformed auth replyr   zInvalid authentication responser   z,Username and password authentication failure)r   re   )rJ   rZ   r   r]   r`   AUTH_GRANTED)r#   rV   r   re   s       r   r[   zAuthReply.loads   s    t99  34441g+/!!>???a\!!KLLLss6****r   N)	r   r   r   rZ   r'   rN   r&   rH   r[   r   r   r   rd   rd      sY         D	HHHKKK+ +; + + + [+ + +r   rd   c                   <    e Zd ZU eed<   eed<   defdZdefdZdS )ConnectRequesthostportrF   c                     t          t          t          j        t          g          }||                                 z  }t          |          S rA   )rB   rI   r)   r*   RSV_build_addr_requestrH   rb   s     r   rL   zConnectRequest.dumps   s:    )W_c:;;((***T{{r   c                    | j                             dd          }t          | j                  rSt	          j        | j                  }t                              |j                  }t          |g          |j
        z   |z   S t          j        }| j                            d          }t          |t          |          g          |z   |z   S )Nr	   bigidna)rk   to_bytesr
   rj   	ipaddress
ip_addressr   r$   versionrH   packedr%   ra   rJ   )rD   rk   ipaddress_typerj   s        r   rn   z"ConnectRequest._build_addr_request   s    y!!!U++## 	B%di00B&222:>>L,((294t;;&-L9##F++D,D		233d:TAAr   N)	r   r   r   rM   rN   r'   rH   rL   rn   r   r   r   ri   ri      se         
III
IIIu    

BU 
B 
B 
B 
B 
B 
Br   ri   c                   h    e Zd ZU eed<   eed<   eed<   eed<   eed<   d Zede	dd fd	            Z
d
S )ConnectReplyr   replyrsv
bound_host
bound_portc                     d S rA   r   rK   s    r   rU   zConnectReply.validate   s    r   rV   rF   c                 4   |st          d          |d         }|t          k    rt          d|d          	 t          |d                   }n?# t          $ r t          d          t          $ r t          d|d         d          w xY w|t          j        k    r,t                              |d          }t          ||	          	 |d
         }n# t          $ r t          d          w xY w|t          k    rt          dt          d          	 |d         }|dd         }|dd          }n# t          $ r t          d          w xY w|t          j
        k    r t          j        t          j        |          }	np|t          j        k    r t          j        t          j        |          }	n@|t          j        k    r|dd                                          }	nt          d|d          t$                              |d          }
 | ||||	|
          S )NzEmpty connect replyr   rX   rY   r   zMalformed connect replyzInvalid reply code: zUnknown error)
error_coder	   zThe reserved byte must be r   r   zInvalid address type: rp   )r   r{   r|   r}   r~   )r   rI   r.   
IndexErrorr"   r1   ReplyMessagesgetrm   r   r    socket	inet_ntopAF_INETr!   AF_INET6r%   decoder'   
from_bytes)r#   rV   r   r{   msgr|   	addr_typebnd_host_databnd_port_databnd_hostbnd_ports              r   r[   zConnectReply.loads   sr    	423331g)KKKKLLL	Dd1g&&EE 	8 	8 	86777 	D 	D 	DBDGBBBCCC	D I'''##E?;;CSU3333	8q'CC 	8 	8 	86777	8 #::D#DDDEEE	8QI 2JM IMM 	8 	8 	86777	8 ((('FFHH+***'GGHH+,,,$QRR(//11HHFiFFFGGG>>-77s
 
 
 	
s#   A <BC C.D2 2EN)r   r   r   r'   rN   r.   rM   rU   r&   rH   r[   r   r   r   rz   rz      s         	HHH	HHHOOOOOO   4
 4
> 4
 4
 4
 [4
 4
 4
r   rz   c                       e Zd ZdS ) StateServerWaitingForAuthMethodsN)r   r   r   r   r   r   r   r      s        Dr   r   c                       e Zd ZU eed<   dS )StateClientSentAuthMethodsrV   N)r   r   r   r;   rN   r   r   r   r   r      s         
r   r   c                       e Zd ZU eed<   dS )StateServerWaitingForAuthrV   N)r   r   r   rP   rN   r   r   r   r   r      s         
r   r   c                   *    e Zd ZU dZee         ed<   dS )StateClientAuthenticatedNrV   )r   r   r   rV   r   rd   rN   r   r   r   r   r     s'          $D(9
$$$$$r   r   c                       e Zd ZU eed<   dS )StateClientSentAuthRequestrV   N)r   r   r   r]   rN   r   r   r   r   r   
  s         
r   r   c                       e Zd ZU eed<   dS )StateClientSentConnectRequestrV   N)r   r   r   ri   rN   r   r   r   r   r     s         
r   r   c                       e Zd ZU eed<   dS )StateServerConnectedrV   N)r   r   r   rz   rN   r   r   r   r   r     s         
r   r   c                   V    e Zd ZU eed<   d ZdedefdZdede	fdZ
ed             Zd	S )

Connection_statec                 ,    t                      | _        d S rA   )r   r   rK   s    r   __init__zConnection.__init__3  s    688r   rR   rF   c                    t          |          t          u rRt          | j                  t          urt	          d          t          |          | _        |                                S t          |          t          u rRt          | j                  t          urt	          d          t          |          | _        |                                S t          |          t          u rRt          | j                  t          urt	          d          t          |          | _        |                                S t	          dt          |                     )Nz0Server is not currently waiting for auth methodsz2Server is not currently waiting for authenticationzClient is not authenticatedzInvalid request type: )typer;   r   r   RuntimeErrorr   rL   r]   r   r   ri   r   r   rT   s     r   sendzConnection.send6  s   ==...DK  (HHH"#UVVV4W==DK==??"==K''DK  (AAA"#WXXX4W==DK==??"==N**DK  (@@@"#@AAA7@@DK==??"CDMMCCDDDr   rV   c                    t          | j                  t          u ryt                              |          }|                    | j        j                   |j        t          j	        k    rt          |          | _        nt                      | _        |S t          | j                  t          u r1t                              |          }t          |          | _        |S t          | j                  t          u r1t                              |          }t!          |          | _        |S t#          d| j                   )N)rV   zInvalid connection state: )r   r   r   rP   r[   rU   rV   rQ   r   r   r   r   r   rd   r   rz   r   r   )rD   rV   r{   s      r   receivezConnection.receiveK  s    :::#))$//ENN4;+,,,|z;;;7UCCC688L :::OOD))E2>>>DKL === &&t,,E.E:::DKLEEEFFFr   c                     | j         S rA   )r   rK   s    r   statezConnection.statea  s
    {r   N)r   r   r   ConnectionStaterN   r   RequestrH   r   Replyr   propertyr   r   r   r   r   r   0  s         9 9 9EG E E E E E*GE Ge G G G G,   X  r   r   )1enumrs   r   typingr   r   dataclassesr   r   errorsr   _helpersr
   rm   NULLrg   rI   IntEnumr   r   r)   r.   r1   r2   r3   r4   r5   r6   r7   r8   r9   r   r;   rP   r]   rd   ri   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s         " " " " " " " " ( ( ( ( ( ( ( (       $ $ $ $ $ $ !    d\	       / / / / /$, / / /    dl   	& 	& 	& 	& 	& 	& 	& 	& *=$&I!#8 2 "J=#%N(*F
 D D D D D D D D" + + + + + + + +<          + + + + + + + +, B B B B B B B B, ?
 ?
 ?
 ?
 ?
 ?
 ?
 ?
D	 	 	 	 	 	 	 	                 % % % % % % % %                          		 $!3 3 3 3 3 3 3 3 3 3r   