
    h                        d 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mZ i dddd	d
dddddddddddddddddddddd d!d"d#d$d%Zd&d'd(d)d*d+d,d-Zd.d/d0Zg d1Zg d2Zi Zd3 Z G d4 d5e          Z G d6 d7e          Zd8 Z G d9 d:e          Z eeed;<            eeed;=            eeed><            eeed>=            eeed;d;?           d@S )Aag  
.. centered::
    NOTICE
    This software/technical data was produced for the U.S. Government
    under Prime Contract No. NASA-03001 and JPL Contract No. 1295026
    and is subject to FAR 52.227-14 (6/87) Rights in Data General,
    and Article GP-51, Rights in Data  General, respectively.
    This software is publicly released under MITRE case #12-3054
    )Packetbind_layersbind_top_down)BitEnumFieldBitFieldBitFieldLenFieldByteEnumFieldConditionalFieldPacketListFieldStrLenField)UDP)conf)SDNV2SDNV2FieldLenFieldz+0x0 Red data, NOT (Checkpoint, EORP or EOB)   z+0x1 Red data, Checkpoint, NOT (EORP or EOB)   z'0x2 Red data, Checkpoint, EORP, NOT EOB   z#0x3 Red data, Checkpoint, EORP, EOB   z0x4 Green data, NOT EOB   z0x5 Green data, undefined   z0x6 Green data, undefined   z0x7 Green data, EOB   z0x8 Report segment	   z 0x9 Report-acknowledgment segmen
   z0xA Control segment, undefined   z0xB Control segment, undefined   z$0xC Cancel segment from block sender   z10xD Cancel-acknowledgment segment to block sender   z&0xE Cancel segment from block receiver   z30xF Cancel-acknowledgment segment to block receiverz-USR_CNCLD  - Client service canceled session.z(UNREACH    - Unreachable client service.z+RLEXC      - Retransmission limit exceeded.z)MISCOLORED - Received miscolored segment.z$SYS_CNCLD  - System error condition.z6RXMTCYCEXC - Exceeded the retransmission cycles limit.RESERVED)r   r   r   r   r   r   r   zLTP authentication extensionzLTP cookie extension)r   r   )r   r   r   r   r   r   r   r   )r   r   r   c                     |t           | <   dS )zBind payload class to the LTP packets.

    :param cls: the class to bind
    :param lambd: lambda that will be called to check
        whether or not the cls should be used
        ex: lambda pkt: ...
    N)_ltp_payload_conditions)clslambds     U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/ltp.pyltp_bind_payloadr&   D   s     $)C       c                   j    e Zd ZdZ edde           eddd           eddd	 
          gZd Z	dS )LTPexzLTP ExtensionExTagr   ExLengthNExData	length_of c                     | j         S N)r+   xs    r%   <lambda>zLTPex.<lambda>U   s    
 r'   )length_fromc                     t           j        S r1   r   padding_layerselfpays     r%   default_payload_classzLTPex.default_payload_classX       !!r'   )
__name__
__module____qualname__namer	   _ltp_extension_tagr   r   fields_descr<    r'   r%   r)   r)   O   sn        Dgq"455:tx@@@Hb.B.BCCC	K" " " " "r'   r)   c                   H    e Zd ZdZ edd           edd          gZd ZdS )LTPReceptionClaimzLTP Reception ClaimReceptionClaimOffsetr   ReceptionClaimLengthc                     t           j        S r1   r7   r9   s     r%   r<   z'LTPReceptionClaim.default_payload_classa   r=   r'   N)r>   r?   r@   rA   r   rC   r<   rD   r'   r%   rF   rF   \   sO         D5/335/335K" " " " "r'   rF   c                 v    t                                           D ]\  }} ||           r|c S t          j        S r1   )r"   itemsr   	raw_layer)pktargskvs       r%   _ltp_guess_payloadrQ   e   sG    '--//  11S66 	HHH	>r'   c                      e Zd Zd Z eddd           eddde           edd           edd           edddd	
           edddd
           e	d	g e
d            e edd          d            e edd          d            e eddd          d            e edd          d            e edd          d            e e	dded           d            e edd          d            e ed d          d!            e ed"d          d#            e ed$d          d%            e ed&dd'
          d(            e e	d'g ed)           d*            e ed+d,e          d-            e ed.d,e          d/            e ed0d          d1            e ed2d          d3            e	dg e
d4           gZd5 ZdS )6LTPversionr   r   flagsSessionOriginatorSessionNumberHeaderExtensionCountNHeaderExtensions)count_ofTrailerExtensionCountTrailerExtensionsc                     | j         S r1   )rX   r2   s    r%   r4   zLTP.<lambda>u   s	    ALb r'   )
count_fromDATA_ClientServiceIDc                     | j         t          v S r1   rU   _ltp_data_segmentr2   s    r%   r4   zLTP.<lambda>z       17.?#? r'   DATA_PayloadOffsetc                     | j         t          v S r1   ra   r2   s    r%   r4   zLTP.<lambda>|   rc   r'   DATA_PayloadLengthLTP_Payloadr-   c                     | j         t          v S r1   ra   r2   s    r%   r4   zLTP.<lambda>~   rc   r'   CheckpointSerialNoc                     | j         t          v S r1   rU   _ltp_checkpoint_segmentr2   s    r%   r4   zLTP.<lambda>   s    17.E#E r'   ReportSerialNoc                 4    | j         t          v p
| j         dk    S Nr   rk   r2   s    r%   r4   zLTP.<lambda>   s    17.E#E $)GqL r'   c                     | j         S r1   )rf   r2   s    r%   r4   zLTP.<lambda>   s	    q?S r'   )next_cls_cbr5   c                     | j         t          v S r1   ra   r2   s    r%   r4   zLTP.<lambda>   rc   r'   RA_ReportSerialNoc                     | j         dk    S )Nr   rU   r2   s    r%   r4   zLTP.<lambda>       17a< r'   ReportCheckpointSerialNoc                     | j         dk    S ro   ru   r2   s    r%   r4   zLTP.<lambda>   rv   r'   ReportUpperBoundc                     | j         dk    S ro   ru   r2   s    r%   r4   zLTP.<lambda>   rv   r'   ReportLowerBoundc                     | j         dk    S ro   ru   r2   s    r%   r4   zLTP.<lambda>   rv   r'   ReportReceptionClaimCountReportReceptionClaimsc                     | j         dk    S ro   ru   r2   s    r%   r4   zLTP.<lambda>   rv   r'   c                     | j         S r1   )r}   r2   s    r%   r4   zLTP.<lambda>   s	    a>Y r'   c                 >    | j         dk    o| j         p
| j        dk    S )Nr   r   )rU   r}   r2   s    r%   r4   zLTP.<lambda>   s&    17a<#x9T5T5wXYXsvwXw r'   CancelFromSenderReasonr   c                     | j         dk    S )Nr   ru   r2   s    r%   r4   zLTP.<lambda>       17b= r'   CancelFromReceiverReasonc                     | j         dk    S )Nr   ru   r2   s    r%   r4   zLTP.<lambda>   r   r'   CancelAckToBlockSenderc                     | j         dk    S )Nr   ru   r2   s    r%   r4   zLTP.<lambda>   r   r'   CancelAckToBlockReceiverc                     | j         dk    S )Nr   ru   r2   s    r%   r4   zLTP.<lambda>   r   r'   c                     | j         S r1   )r[   r2   s    r%   r4   zLTP.<lambda>   s	    QMd r'   c                 <    |                      d          t          gfS )NzLTP %SessionNumber%)sprintfr   )r:   s    r%   	mysummaryzLTP.mysummary   s    ||122SE99r'   )r>   r?   r@   rA   r   r   _ltp_flag_valsr   r   r   r)   r
   r   rQ   rF   r	   _ltp_cancel_reasonsrC   r   rD   r'   r%   rS   rS   l   s       DAq!!WaN33!1%%oq!!/qCUVVV0$DWXXX*BBbBbccc 	5q99??	A 	A3Q77??	A 	A++,@$R_```??	A 	A
 	3Q77EE	G 	G
 	/33) )	* 	* 	J\5S5SU U U??	A 	A 	2A66//	1 	1 	91==//	1 	11155//	1 	11155//	1 	1++,GXoppp//	1 	1)@"FW4Y4Y[ [ [xx	z 	z 	'?')+>@ @00	2 	2 	'A')+>@ @00	2 	2 	7;;00	2 	291==00	2 	2
 	+RCdCdeeeSJKX: : : : :r'   rS   iY  )sport)dportiA  )r   r   N)__doc__scapy.packetr   r   r   scapy.fieldsr   r   r   r	   r
   r   r   scapy.layers.inetr   scapy.configr   scapy.contrib.sdnvr   r   r   r   rB   rb   rl   r"   r&   r)   rF   rQ   rS   rD   r'   r%   <module>r      s#    < ; ; ; ; ; ; ; ; ;B B B B B B B B B B B B B B B B B B ! ! ! ! ! !       8 8 8 8 8 8 8 8?4?4? 0? ,	?
  ? "? "? ? ? )? (? (? .? ;? 0?  =!?& 7142-?   &  
 -,, #))  ) ) )
" 
" 
" 
" 
"F 
" 
" 
"" " " " " " " "  O: O: O: O: O:& O: O: O:d c3d # # # # c3d # # # # c3d # # # # c3d # # # # CD - - - - - -r'   