
    h              	       F   d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dZ dd	d
ddZ!dd	iZ"d  ej#        e"$                                e!$                                          D             Z% G d de	          Z& G d de&          Z' G d de&          Z( G d de&          Z)d	d
dZ* G d de          Z+ G d de          Z, G d de&          Z- G d de&          Z. G d  d!e&          Z/ G d" d#e&          Z0 G d$ d%e&          Z1e'e(e-e.e)e/e0e1d&Z2i d'd	d(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEZ3 G dF dGe	          Z4 e
ee4dHI            e
ee4dHI           dS )Jz
    STUN (RFC 8489)

    TLV code derived from the DTP implementation:
      Thanks to Nicolas Bareil,
                Arnaud Ebalard,
                Jochen Bartl.
    N)UDPTCP)conf)Packetbind_layers)	inet_ntoa	inet_aton)BitFieldBitEnumFieldLenFieldIntFieldPadFieldStrLenFieldPacketListFieldXShortFieldFieldLenField
ShortFieldByteEnumField	ByteFieldXNBytesField
XLongField	XIntField	XBitFieldIPFieldiB!         )request
indicationzsuccess responsezerror responseBindingc                     i | ]I\  \  }}\  }}d                      ||          |dz  |dz  dz  z  |dz  dz  z  |dz  dz  z  |dz  d	z  z  JS )
z{} {}   r      p      r      i  	   )format).0methodmethod_codeclass_
class_codes        V/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/stun.py
<dictcomp>r/   ;   s     	 	 	 	43
 NN66""	~	%	t	!+	,	~	%!+	, 
t	!+	, 
~	%!+		,	 	 	    c            	           e Zd ZdZ edd           eddd           e eddd	 
          d          gZe	dd            Z
d ZdS )STUNGenericTlvzSTUN Generic TLVtyper   lengthNvalue	length_of c                     | j         S Nr4   pkts    r.   <lambda>zSTUNGenericTlv.<lambda>N   s     r0   length_fromr#   alignc                     |rQt          |          dk    r>t          j        d|d d                   d         }t                              ||           S | S )Nr   z!Hr   )lenstructunpack_stun_tlv_classget)cls_pktargskwargsts        r.   dispatch_hookzSTUNGenericTlv.dispatch_hookQ   sQ     	/CIINNdD!H--a0A"&&q#...
r0   c                     t           j        S r:   )r   padding_layer)selfpayloads     r.   guess_payload_classz"STUNGenericTlv.guess_payload_classX   s    !!r0   r:   )__name__
__module____qualname__namer   r   r   r   fields_descclassmethodrN   rS    r0   r.   r2   r2   H   s        D 	FF##h888Wb6K6KLLLTUVVVK    [" " " " "r0   r2   c            	       z    e Zd ZdZ edd           eddd           e eddd	 
          dd          gZdS )STUNUsernamezSTUN Usernamer3      r4   Nusernamer6   r8   c                     | j         S r:   r;   r<   s    r.   r>   zSTUNUsername.<lambda>c   s    
 r0   r?   r#       )rB   padwith	rT   rU   rV   rW   r   r   r   r   rX   rZ   r0   r.   r\   r\   \   sp        D 	FF##h
;;;K
B4J4JKKKW	
 	
 	
KKKr0   r\   c                   `    e Zd ZdZ edd           edd           eddd          gZd Zd	S )
STUNMessageIntegrityzSTUN Message Integrityr3      r4      	hmac_sha1r   c                     ||z  }|S r:   rZ   )rQ   r=   pays      r.   
post_buildzSTUNMessageIntegrity.post_buildr   s    s

r0   N)	rT   rU   rV   rW   r   r   r   rX   rj   rZ   r0   r.   rd   rd   i   s`        #D 	FF##
8R  [!R((K    r0   rd   c                   X    e Zd ZdZ edd           edd           edd          gZdS )	STUNPriorityzSTUN Priorityr3   $   r4   r#   priorityr   N)rT   rU   rV   rW   r   r   r   rX   rZ   r0   r.   rl   rl   w   sI        D 	FF##
8QQKKKr0   rl   )IPv4IPv6c                       e Zd Zd Zd ZdS )XorPortc                     |t           dz	  z  S N   MAGIC_COOKIErQ   r=   xs      r.   m2izXorPort.m2i       LB&''r0   c                     |t           dz	  z  S rt   rv   rx   s      r.   i2mzXorPort.i2m   r{   r0   NrT   rU   rV   rz   r}   rZ   r0   r.   rr   rr      s2        ( ( (( ( ( ( (r0   rr   c                       e Zd Zd Zd ZdS )XorIpc           	          t          t          j        dt          j        d|          d         t          z                      S )N>ir   )r   rE   packrF   rw   rx   s      r.   rz   z	XorIp.m2i   s2    TFM$,B,B1,E,TVVWWWr0   c           	          |dS t          j        dt          j        dt          |                    t          z            S )Ns       r   )rE   r   rF   r	   rw   rx   s      r.   r}   z	XorIp.i2m   s6    9&&{4tYq\\!B!B\!QRRRr0   Nr~   rZ   r0   r.   r   r      s:        X X XS S S S Sr0   r   c            	           e Zd ZdZ edd           edd           edd           edd	e           e	d
d           e
dd          gZdS )STUNXorMappedAddresszSTUN XOR Mapped Addressr3       r4   re   RESERVEDr   address_familyr   xportxipN)rT   rU   rV   rW   r   r   r   r   _xor_mapped_address_familyrr   r   rX   rZ   r0   r.   r   r      sx        $D 	FF##
8Q	*a  &+EFFeQKKKr0   r   c            	       x    e Zd ZdZ edd           eddd           e eddd	 
          d          gZdS )STUNUseCandidatezSTUN Use Candidater3   %   r4   r   r5   r6   r8   c                     | j         S r:   r;   r<   s    r.   r>   zSTUNUseCandidate.<lambda>   s    #* r0   r?   r#   rA   Nrb   rZ   r0   r.   r   r      sg        D 	FF##hW555Wb6L6LMMMUVWWWKKKr0   r   c                   X    e Zd ZdZ edd           edd           edd          gZdS )STUNFingerprintzSTUN Fingerprintr3   (  r4   r#   crc_32N)rT   rU   rV   rW   r   r   r   rX   rZ   r0   r.   r   r      sI        D 	FF##
8Q	(D!!KKKr0   r   c                   X    e Zd ZdZ edd           edd           edd          gZdS )STUNIceControllingzSTUN ICE-controllingr3   *  r4   re   tie_breakerN)rT   rU   rV   rW   r   r   r   rX   rZ   r0   r.   r   r      sI        !D 	FF##
8Q
=$''KKKr0   r   c                   n    e Zd ZdZ edd           edd           edd           edd	          gZd
S )STUNGoogNetworkInfozSTUN Google Network Infor3   W  r4   r#   
network_idr   network_costi  N)rT   rU   rV   rW   r   r   rX   rZ   r0   r.   r   r      sX        %D 	FF##
8Q
<##
>3''	KKKr0   r   )r]   re   r   r   rm   r   r   r   zMAPPED-ADDRESSUSERNAMEr]   zMESSAGE-INTEGRITYre   z
ERROR-CODEr'   zUNKNOWN-ATTRIBUTES
   REALMrf   NONCE   zXOR-MAPPED-ADDRESSr   PRIORITYrm   zUSE-CANDIDATEr   SOFTWAREi"  zALTERNATE-SERVERi#  FINGERPRINTr   zICE-CONTROLLEDi)  zICE-CONTROLLINGr   zGOOG-NETWORK-INFOr   c            
           e Zd ZdZ eddd           eddde           ed	dd
           ede	           e
ddd           edg e          gZd ZdS )STUNr8   r   r   r   )sizestun_message_typeN   r4   !h)fmtmagic_cookietransaction_id`   
attributesc                     ||z  }| j         ;|d d         t          j        dt          |          dz
            z   |dd          z   }| j        D ]}t          |t                    r	 |S )Nr   r   rf   r#   )r4   rE   r   rD   r   
isinstancerd   )rQ   r=   ri   attrs       r.   rj   zSTUN.post_build   su    s
;bqb'FKc#hhm<<<s122wFCO 	 	D$ 455 
r0   )rT   rU   rV   descriptionr
   r   _stun_message_typer   r   rw   r   r   r2   rX   rj   rZ   r0   r.   r   r      s        K 	T***($4FGG4T***	.,//	"D"--b.99K    r0   r   i  )dport)5__doc__rE   	itertoolsscapy.layers.inetr   r   scapy.configr   scapy.packetr   r   scapy.utilsr   r	   scapy.fieldsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   _stun_class_stun_methodproductitemsr   r2   r\   rd   rl   r   rr   r   r   r   r   r   r   rG   _stun_tlv_attribute_typesr   rZ   r0   r.   <module>r      s         & & & & & & & &       , , , , , , , , , , , , , , , ,                                     (  	  ~
	 	 		,,,..0A0A0C0CDD	 	 	 " " " " "V " " "(
 
 
 
 
> 
 
 
    >       >      ( ( ( ( (j ( ( (S S S S SG S S S
 
 
 
 
> 
 
 
    ~       n              .      	 	f  &	
 & V V &  V   6 f v  ! (    6   , CT " " " " CT " " " " " "r0   