
    hv.                     J   d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	m
Z
mZmZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZm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          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          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          Z) G d. d/e          Z* eee*d01            eee*d02            eeed01            eeed02            eee*d0d03            eee*d0d03           dS )4z
Label Distribution Protocol (LDP)

http://git.savannah.gnu.org/cgit/ldpscapy.git/snapshot/ldpscapy-5285b81d6e628043df2a83301b292f24a95f0ba1.tar.gz

    N)orb)Packetbind_layersbind_bottom_up)BitFieldMayEndIPFieldIntField
ShortFieldStrField	XBitField)UDP)TCP)conf)	inet_aton	inet_ntoac                       e Zd Zd Zd ZdS )_LDP_Packetc                 t   t           t          t          t          t          t
          t          t          t          t          t          d}t          j        d|dd                   d         }|dz  }|dk    r.t          j        d|dd                   d         dk    rt          S ||v r||         S t          j        S )	N)                           !Hr      i  r         )LDPNotificationLDPHelloLDPInitLDPKeepAlive
LDPAddressLDPAddressWM
LDPLabelMMLDPLabelReqMLDPLabelARM
LDPLabelWMLDPLabelRelMstructunpackLDPr   	raw_layer)selfpLDPTypestypes       U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/ldp.pyguess_payload_classz_LDP_Packet.guess_payload_class%   s    #    
 
 }T1QqS6**1-f}6>>fmD!AaC&99!<rAAJ8D>!>!    c                     | j         =t          |          dz
  }|d d         t          j        d|          z   |dd          z   }||z   S )Nr#   r"   r!   lenr0   packr4   r5   paytmp_lens       r8   
post_buildz_LDP_Packet.post_build<   sM    8!ffqjG"1"D'222QqrrU:A3wr:   N)__name__
__module____qualname__r9   rB    r:   r8   r   r   #   s2        " " ".    r:   r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )FecTLVFieldr   c                    d}|dd          }g }|rut          |d                   }|dz  }|dz  r|dz  }t          |dd|z            dd|z
  z  z             }|                    ||f           |d|z   z  }|d|z   d          }|u|S )Nr   r#         r       )r   r   append)r4   pktxusedlistmask	nbroctetsadds           r8   m2izFecTLVField.m2iJ   s    abbE 	" qt99D	Iax Q	AaIo.A	M1JJKKCKKd$$$A	M!D!i-..!A  	" r:   c                    |sdS t          |t                    r|S d}d}d}|D ]B}|dz  }|t          j        d|d                   z  }|t	          |d                   z  }|dz  }C|t          j        d|          z  }||z  }|S )	Nr:   s    r   s    !Br   rK   r!   
isinstancebytesr0   r>   r   )r4   rN   rO   srA   fecos          r8   i2mzFecTLVField.i2m^   s     	3a 	H 	 	A?"C6;tQqT***C9QqT??"CqLGG	V[w'''	Sr:   c                 R    dt          j        d|dd                   d         z   }|S zGet the size of this fieldr#   r!   r"   r   r0   r1   r4   r[   rA   s      r8   sizezFecTLVField.sizeq   *    fmD!AaC&11!44r:   c                 |    |                      |          }||d          |                     ||d |                   fS Nrc   rU   r4   rN   r[   rA   s       r8   getfieldzFecTLVField.getfieldv   :    ))A,,{DHHS!HWH+6666r:   NrC   rD   rE   islistrU   r^   rc   ri   rF   r:   r8   rH   rH   G   sU        F  (  &  
7 7 7 7 7r:   rH   c                   &    e Zd Zd Zd Zd Zd ZdS )LabelTLVFieldc                 H    t          j        d|dd                   d         S )N!Ir#   rK   r   ra   )r4   rN   rO   s      r8   rU   zLabelTLVField.m2i~   s!    }T1QqS6**1--r:   c                 h    t          |t                    r|S d}|t          j        d|          z  }|S )Ns     rp   rY   rZ   r0   r>   )r4   rN   rO   r[   s       r8   r^   zLabelTLVField.i2m   s9    a 	H	V[q!!!r:   c                 R    dt          j        d|dd                   d         z   }|S r`   ra   rb   s      r8   rc   zLabelTLVField.size   rd   r:   c                 |    |                      |          }||d          |                     ||d |                   fS rf   rg   rh   s       r8   ri   zLabelTLVField.getfield   rj   r:   N)rC   rD   rE   rU   r^   rc   ri   rF   r:   r8   rn   rn   }   sP        . . .    
7 7 7 7 7r:   rn   c                   *    e Zd ZdZd Zd Zd Zd ZdS )AddressTLVFieldr   c                    t          j        d|dd                   d         dz
  }|dz  }|dd          }g }t          d|          D ]7}|d|z  d|z  dz            }|                    t	          |                     8|S )Nr!   r"   r#   r      )r0   r1   rangerM   r   )r4   rN   rO   nbrrQ   irT   s          r8   rU   zAddressTLVField.m2i   s    mD!AaC&))!,q0	abbEq# 	( 	(AAE!a%!)O$CKK	#''''r:   c                     |sdS t          |t                    r|S dt          |          dz  z   }dt          j        d|          z   dz   }|D ]}|t          |          z  }|S )Nr:   r"   r#   s   r!   s    )rY   rZ   r=   r0   r>   r   )r4   rN   rO   rA   r[   r]   s         r8   r^   zAddressTLVField.i2m   sz     	3a 	Hc!ffqj.&+dG444{B 	 	A1AAr:   c                 R    dt          j        d|dd                   d         z   }|S r`   ra   rb   s      r8   rc   zAddressTLVField.size   rd   r:   c                     |s|g fS |                      |          }||d          |                     ||d |                   fS rf   rg   rh   s       r8   ri   zAddressTLVField.getfield   sK     	b5L))A,,{DHHS!HWH+6666r:   Nrk   rF   r:   r8   rv   rv      sU        F  	 	 	  
7 7 7 7 7r:   rv   c                   $    e Zd ZdZd Zd Zd ZdS )StatusTLVFieldr   c                    g }t          j        d|dd                   d         }|                    |dz  dz	             |                    |dz  dz	             |                    |d	z             |                    t          j        d|dd
                   d                    |                    t          j        d|d
d                   d                    |S )Nrp   r#   rK   r                 @   i?   r!      )r0   r1   rM   )r4   rN   rO   lst
statuscodes        r8   rU   zStatusTLVField.m2i   s    ]41Q3003


J&2-...

J&2-...

:
*+++

6=q2w//2333

6=qBx003444
r:   c                    t          |t                    r|S dt          j        dd          z   }d}|d         dk    r|dz  }|d         dk    r|dz  }||d         z  }|t          j        d	|          z  }t	          |          d
k    r|t          j        d	|d
                   z  }n|dz  }t	          |          dk    r|t          j        d|d                   z  }n|dz  }|S )Ns    r!   
   r   r   r   r   r"   rp   rJ   s       r#   s     )rY   rZ   r0   r>   r=   )r4   rN   rO   r[   r   s        r8   r^   zStatusTLVField.i2m   s    a 	H&+dB///
Q4199%JQ4199%Jad
	V[z***q66A::T1Q4(((AA$$Aq66A::T1Q4(((AAAr:   c                 V    d}||d          |                      ||d |                   fS )Nr   rU   rh   s       r8   ri   zStatusTLVField.getfield   0    {DHHS!HWH+6666r:   NrC   rD   rE   rl   rU   r^   ri   rF   r:   r8   r   r      sF        F    *7 7 7 7 7r:   r   c                   $    e Zd ZdZd Zd Zd ZdS )CommonHelloTLVFieldr   c                    g }t          j        d|dd                   d         }|                    |           t          |d                   }|dz  dz	  }|                    |           |dz  dz	  }|                    |           |S )Nr!   r#   rx   r         @   )r0   r1   rM   r   )r4   rN   rO   rQ   vflagss         r8   rU   zCommonHelloTLVField.m2i   s    M$!A#''*AAaD		T\aAT\aAr:   c                     t          |t                    r|S d}|t          j        d|d                   z  }d}|d         dk    r|dz  }|d         dk    r|dz  }|t          j        d|          z  }|d	z  }|S )
Ns     r!   r   r   r   r"   r   rW   rL   rr   )r4   rN   rO   r[   bytes        r8   r^   zCommonHelloTLVField.i2m   s    a 	H	V[qt$$$Q4199DLDQ4199DLD	V[t$$$	Wr:   c                 V    d}||d          |                      ||d |                   fS )NrK   r   rh   s       r8   ri   zCommonHelloTLVField.getfield   s0    {DHHS!HWH+6666r:   Nr   rF   r:   r8   r   r      sF        F	 	 	  7 7 7 7 7r:   r   c                   $    e Zd ZdZd Zd Zd ZdS )CommonSessionTLVFieldr   c                    t          j        d|dd                   d         g}t          j        d|dd                   d         }|                    |dz  dz	             |                    |d	z  dz	             |                    t          j        d|dd
                   d                    |                    t          j        d|d
d                   d                    |                    t          |dd                              |                    t          j        d|dd                   d                    |S )Nr!   rx   rK   r   B	   r   r   r   r   r         )r0   r1   rM   r   )r4   rN   rO   r   octets        r8   rU   zCommonSessionTLVField.m2i  s   }T1QqS6**1-.c1QqS6**1-

EDLQ&'''

EDLQ&'''

6=a"g..q1222

6=qBx003444

9Qr"uX&&'''

6=qBx003444
r:   c                    t          |t                    r|S d}|t          j        d|d                   z  }d}|d         dk    r|dz  }|d         dk    r|dz  }|t          j        d|          z  }|t          j        d|d	                   z  }|t          j        d|d
                   z  }|t	          |d                   z  }|t          j        d|d                   z  }|S )Ns      r!   r   r   r   r"   r   rW   rJ   r#      rx   rX   )r4   rN   rO   r[   r   s        r8   r^   zCommonSessionTLVField.i2m  s    a 	H'	V[qt$$$Q4199TMEQ4199TME	V[u%%%	V[qt$$$	V[qt$$$	Yqt__	V[qt$$$r:   c                 V    d}||d          |                      ||d |                   fS )Nr   r   rh   s       r8   ri   zCommonSessionTLVField.getfield#  r   r:   Nr   rF   r:   r8   r   r     sF        F	 	 	  "7 7 7 7 7r:   r   c                       e Zd Zd Z eddd           eddd           edd           edd           ed	d
          gZdS )r%   ur   r   r7      r=   Nidstatus)r   r   r   r   r   )	rC   rD   rE   namer   r   r
   r   fields_descrF   r:   r8   r%   r%   +  si        D8CA&&8FFB//:eT**8D!$$!>(O<<	>KKKr:   r%   c            	           e Zd Zd Z eddd           eddd           edd           ed	d           ed
g d          gZdS )r&   r   r   r   r7   r   r   r=   Nr   params)   r   r   )	rC   rD   rE   r   r   r   r
   r   r   rF   r:   r8   r&   r&   6  sn        D8CA&&8FFB//:eT**8D!$$&&x==	?KKKr:   r&   c                       e Zd Zd Z eddd           eddd           edd           ed	d           ed
d          gZ	dS )r'   r   r   r   r7   r   r   r=   Nr   r   )
rC   rD   rE   r   r   r   r   r
   r   r   rF   r:   r8   r'   r'   A  sj        D8CA&&9VVR00:eT**8D!$$((488	:KKKr:   r'   c                   r    e Zd Zd Z eddd           eddd           edd           ed	d          gZdS )
r(   r   r   r   r7   r   r   r=   Nr   )	rC   rD   rE   r   r   r   r   r
   r   rF   r:   r8   r(   r(   L  sZ        D8CA&&9VVR00:eT**8D!$$&KKKr:   r(   c                       e Zd Zd Z eddd           eddd           edd           ed	d           ed
d          gZ	dS )r)   r   r   r   r7   r   r   r=   Nr   address
rC   rD   rE   r   r   r   r   r
   rv   r   rF   r:   r8   r)   r)   V  si        D8CA&&9VVR00:eT**8D!$$"?9d33	5KKKr:   r)   c                       e Zd Zd Z eddd           eddd           edd           ed	d           ed
d          gZ	dS )r*   r   r   r   r7   r   r   r=   Nr   r   r   rF   r:   r8   r*   r*   a  si        D8CA&&9VVR00:eT**8D!$$"?9d33	5KKKr:   r*   c            
           e Zd Zd Z eddd           eddd           edd           ed	d           e e	d
d                     e
dd          gZdS )r+   r   r   r   r7   r   r   r=   Nr   r\   labelrC   rD   rE   r   r   r   r   r
   r   rH   rn   r   rF   r:   r8   r+   r+   l          D8CA&&9VVR00:eT**8D!$$6++eT2233 =!,,.KKKr:   r+   c                       e Zd Zd Z eddd           eddd           edd           ed	d           ed
d          gZ	dS )r,   r   r   r   r7   r   r   r=   Nr   r\   
rC   rD   rE   r   r   r   r   r
   rH   r   rF   r:   r8   r,   r,   x  si        D8CA&&9VVR00:eT**8D!$$;ud++	-KKKr:   r,   c            	           e Zd Zd Z eddd           eddd           edd           ed	d           ed
d           edd          gZ	dS )r-   r   r   r   r7   r   r   r=   Nr   r\   	labelRMidr   rF   r:   r8   r-   r-     sx        D8CA&&9VVR00:eT**8D!$$;ud++8K++-KKKr:   r-   c            
           e Zd Zd Z eddd           eddd           edd           ed	d           e e	d
d                     e
dd          gZdS )r.   r   r   r   r7   r   r   r=   Nr   r\   r   r   rF   r:   r8   r.   r.     r   r:   r.   c            	           e Zd Zd Z eddd           eddd           edd           ed	d           ed
d           e	dd          gZ
dS )r/   r   r   r   r7   r    r   r=   Nr   r\   r   )rC   rD   rE   r   r   r   r   r
   rH   rn   r   rF   r:   r8   r/   r/     sx        D8CA&&9VVR00:eT**8D!$$;ud++ =!,,.KKKr:   r/   c                   t    e Zd Zd Z edd           edd           edd           edd          gZd	 ZdS )
r2   versionr   r=   Nr   z	127.0.0.1spacer   c                     |pd}| j         Mt          |          t          |          z   dz
  }|d d         t          j        d|          z   |dd          z   }||z   S )Nr:   r#   r"   r!   r<   r?   s       r8   rB   zLDP.post_build  sb    jS8!ffs3xx'!+G"1"D'222QqrrU:A3wr:   )rC   rD   rE   r   r   r	   r   rB   rF   r:   r8   r2   r2     sk        D:i++:eT**74--:gq))+K
    r:   r2   i  )sport)dport)r   r   )+__doc__r0   scapy.compatr   scapy.packetr   r   r   scapy.fieldsr   r   r	   r
   r   r   r   scapy.layers.inetr   r   scapy.configr   scapy.utilsr   r   r   rH   rn   rv   r   r   r   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r2   rF   r:   r8   <module>r      s           < < < < < < < < < <                  " ! ! ! ! ! ! ! ! ! ! !       , , , , , , , ,    &   H17 17 17 17 17( 17 17 17l7 7 7 7 7H 7 7 7.!7 !7 !7 !7 !7h !7 !7 !7L$7 $7 $7 $7 $7X $7 $7 $7P7 7 7 7 7( 7 7 7D!7 !7 !7 !7 !7H !7 !7 !7N> > > > >k > > >? ? ? ? ?{ ? ? ?: : : : :k : : :& & & & &; & & &5 5 5 5 5 5 5 55 5 5 5 5; 5 5 5. . . . . . . .- - - - -; - - -- - - - -+ - - -. . . . . . . .. . . . .; . . .    +    sCs # # # # sCs # # # # sCs # # # # sCs # # # # CCs + + + + CCs + + + + + +r:   