
    h              
       n   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZmZmZmZmZmZmZ ddlmZmZmZ ej                            d	i            ej        d	                             d
dg            G d de          Z eeed            eeed           dddZ G d de          ZdddddZ G d de          ZddddZ G d de          Z d d!d"d#d$d%d&d'd(d)	Z! G d* d+e          Z" G d, d-e          Z# ee	e#d            ee	e#d            ee	e#dd.           d/S )0zSOCKS4/5 Protocol

You can change the server ports that are used in the SOCKS layer by editing.
conf.contribs['socks']['serverports']
    )conf)warning)DNSStrField)TCPUDP)IP6Field)ByteEnumField	ByteFieldIPFieldMultipleTypeField
ShortFieldStrFieldStrNullField)Packetbind_layersbind_bottom_upsocksserverports8  c                   >    e Zd Z edddddd          gZd Zd Zd	S )
SOCKSvn   zv4 - Requestz
v4 - Replyv5)   r   r   c                 n   dx}}| j         rNt          | j         t                    r4t          j        d         d         }| j         j        |v }| j         j        |v }| j        dk    r|rt          S |rt          S n)| j        dk    r
|rt          S n| j        dk    r	|rt          S t          d           t          S )NTr   r   r   r   r   zqNo TCP underlayer, or dport/sport not in conf.contribs['socks']['serverports']. Assuming a SOCKS v5 request layer)
underlayer
isinstancer   r   contribsdportsportr   SOCKS5RequestSOCKS5ReplySOCKS4RequestSOCKS4Replyr   )selfpktd_ports_portportss        W/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/socks.pyguess_payload_classzSOCKS.guess_payload_class-   s    ? 	4z$/3?? 	4M'*=9E_*e3F_*e3F7c>> #$$ #""#W^^ %$$%W^^ #"" 4 	5 	5 	5     c                 D   | j         rt          | j         t                    rit          |t          t          f          rd| j         _        d| j         _        n4t          |t          t          f          rd| j         _        d| j         _        t          j
        | |           d S )Nr   i9  )r   r   r   r"   r$   r    r!   r#   r%   r   add_payload)r&   payloads     r+   r/   zSOCKS.add_payloadC   s    ? 	-z$/3?? 	-'M=#ABB -(,%(,%%Gk;%?@@ -(,%(,%4)))))r-   N)__name__
__module____qualname__r	   fields_descr,   r/    r-   r+   r   r   '   s[        dC*DII	K 	KK
  ,* * * * *r-   r   )r!   )r    ConnectBind)      c                   |    e Zd ZdZeddiiZ edde           edd           e	dd	           e
d
d          gZdS )r$   zSOCKS 4 - Requestr   r   cdr8   dstportP   dst0.0.0.0userid N)r1   r2   r3   namer   overload_fieldsr	   _socks4_cd_requestr   r   r   r4   r5   r-   r+   r$   r$   Y   sg        DtSk*OdA122
9b!!y!!Xr""	KKKr-   r$   zRequest grantedzRequest rejectedz8Request rejected - SOCKS server cannot connect to identdz$Request rejected - user-ids mismatch)Z   [   \   ]   c                   Z    e Zd ZdZeddiiZ edde          gej	        dd         z   Z	dS )	r%   zSOCKS 4 - Replyr   r   r;   rE   r8   N)
r1   r2   r3   rB   r   rC   r	   _socks4_cd_replyr$   r4   r5   r-   r+   r%   r%   l   sN        DtSk*OdB 011!!B$'(KKKr-   r%   zUDP associate)r8   r9      c                      e Zd ZdZeddiiZ edde           edd           eddd	d
dd           e	 e
dd          d f edd          d f edd          d fg edd                     edd          gZdS )r"   zSOCKS 5 - Requestr   r   r;   r   resatypr8   IPv4
DomainNameIPv6)r8   rL   r   addrr?   c                     | j         dk    S )Nr8   rO   r'   s    r+   <lambda>zSOCKS5Request.<lambda>   s    S r-   rA   c                     | j         dk    S )NrL   rU   rV   s    r+   rW   zSOCKS5Request.<lambda>   s    ch#o r-   z::c                     | j         dk    S )Nr   rU   rV   s    r+   rW   zSOCKS5Request.<lambda>   s    SX_ r-   portr=   N)r1   r2   r3   rB   r   rC   r	   _socks5_cdtypesr
   r   r   r   r   r   r   r4   r5   r-   r+   r"   r"   }   s        DtSk*OdC11	%fc"FCC	E 	E ++-H-HIVR((*E*EF&$'')D)DE HVR  
	
 
	
 	
62!KKKr-   r"   	succeededzgeneral server failurez!connection not allowed by rulesetznetwork unreachablezhost unreachablezconnection refusedzTTL expiredzcommand not supportedzaddress type not supported)	r   r8   r9   rL   r   r            c                   Z    e Zd ZdZeddiiZ edde          gej	        dd         z   Z	dS )r#   zSOCKS 5 - Replyr   r   repr   r8   N)
r1   r2   r3   rB   r   rC   r	   _socks5_repr"   r4   r5   r-   r+   r#   r#      sO        DtSk*O 	eS+..!!""%&KKKr-   r#   c                   h    e Zd ZdZ edd           edd          gej        dd         z   Zd ZdS )	SOCKS5UDPzSOCKS 5 - UDP HeaderrN   r   fragr9   Nc                     | j         dk    rt          j        S t          | j         | j                                       d           S )Nr   r!   r    )rZ   r   	raw_layerr   r,   )r&   ss     r+   r,   zSOCKS5UDP.guess_payload_class   s:    9>>>!$)444HHNNNr-   )	r1   r2   r3   rB   r   r
   r"   r4   r,   r5   r-   r+   rd   rd      sh        !D
5!	&! 	!!""%&K
O O O O Or-   rd   rg   N)$__doc__scapy.configr   scapy.errorr   scapy.layers.dnsr   scapy.layers.inetr   r   scapy.layers.inet6r   scapy.fieldsr	   r
   r   r   r   r   r   scapy.packetr   r   r   r   
setdefaultr   rD   r$   rK   r%   r[   r"   rb   r#   rd   r5   r-   r+   <module>rs      s                ( ( ( ( ( ( & & & & & & & & ' ' ' ' ' '                  = < < < < < < < < <   " % % % g  ! !-$ 8 8 8$* $* $* $* $*F $* $* $*N sE & & & & sE & & & &
       F    	B.	  ( ( ( ( (& ( ( (      F   0 *#
 
& & & & && & & &
O 
O 
O 
O 
O 
O 
O 
O sIT * * * * sIT * * * * C$d 3 3 3 3 3 3r-   