a
    kÄ#dx)  ã                   @   sP  d Z ddlZddlmZmZmZ ddlmZmZm	Z	m
Z
 ddlmZmZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ d
Zd
ZdZdZdZdZdZd
ZdZdddœZddddddddddddœZddd d!d"d#d$d%d&d'œ	Z G d(d)„ d)eƒZ!G d*d+„ d+eƒZ"G d,d-„ d-eƒZ#G d.d/„ d/eƒZ$G d0d1„ d1eƒZ%G d2d3„ d3eƒZ&G d4d5„ d5eƒZ'G d6d7„ d7eƒZ(G d8d9„ d9eƒZ)G d:d;„ d;eƒZ*G d<d=„ d=eƒZ+e!e"e#e$e%e&e'e)e+d>œ	Z,e!e"e#e$e%e&e(e)e*e+d?œ
Z-G d@dA„ dAeƒZ.eee.dBdC� eee.dBdD� eee.dEdC� eee.dEdD� eee.dFdC� eee.dFdD� e/dGk�rLddHl0m1Z1 e1e2ƒ dIdJ� dS )Kz–
RTR

Based on RTR RFC 6810 https://tools.ietf.org/html/rfc6810 for version 0
Based on RTR RFC 8210 https://tools.ietf.org/html/rfc8210 for version 1
é    N)ÚPacketÚbind_layersÚRaw)ÚByteEnumFieldÚ	ByteFieldÚIntFieldÚ
ShortField)ÚIPFieldÚIP6FieldÚStrLenField)ÚFieldLenField)ÚStrFixedLenFieldÚShortEnumField)ÚTCP)Úorbé   é   é   é    é   Ú0Ú1)r   é   úSerial NotifyúSerial QueryúReset QueryúCache ResponseúIPv4 PrefixúIPv6 PrefixzEnd of DatazCache Resetú
Router KeyúError ReportÚReserved)r   r   é   é   é   é   é   r   é	   é
   éÿ   zCorrupt DatazInternal ErrorzNo data AvailablezInvalid RequestzUnsupported Protocol VersionzUnsupported PDU TypezWithdrawal of Unknown RecordzDuplicate Announcement ReceivedzUnexpected Protocol Version)	r   r   r"   r#   r$   é   r%   r&   r   c                   @   sD   e Zd ZdZdZeddeƒeddeƒeddƒe	de
ƒe	ddƒgZd	S )
ÚRTRSerialNotifyze

    Serial Notify packet from section 5.2
    https://tools.ietf.org/html/rfc6810#section-5.2

    r   Úrtr_versionr   Úpdu_typeÚ
session_idÚlengthÚserial_numberN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Únamer   ÚRTR_VERSIONÚPDU_TYPEr   r   ÚSTATIC_SERIAL_NOTIFY_LENGTHÚfields_desc© r:   r:   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/rtr.pyr+   @   s   

ür+   c                   @   sD   e Zd ZdZdZeddeƒeddeƒeddƒe	de
ƒe	d	dƒgZd
S )ÚRTRSerialQueryzd

    Serial Query packet from section 5.3
    https://tools.ietf.org/html/rfc6810#section-5.3

    r   r,   r   r-   r   r.   r/   r0   N)r1   r2   r3   r4   r5   r   r6   r7   r   r   ÚSTATIC_SERIAL_QUERY_LENGTHr9   r:   r:   r:   r;   r<   Q   s   

ür<   c                   @   s<   e Zd ZdZdZeddeƒeddeƒeddƒe	de
ƒgZd	S )
ÚRTRResetQueryzc

    Reset Query packet from section 5.4
    https://tools.ietf.org/html/rfc6810#section-5.4

    r   r,   r   r-   r"   Úreservedr/   N)r1   r2   r3   r4   r5   r   r6   r7   r   r   ÚSTATIC_RESET_QUERY_LENGTHr9   r:   r:   r:   r;   r>   a   s   

ýr>   c                   @   sD   e Zd ZdZdZeddeƒeddeƒeddƒe	de
ƒgZd	d
„ ZdS )ÚRTRCacheResponsezf

    Cache Response packet from section 5.5
    https://tools.ietf.org/html/rfc6810#section-5.5

    r   r,   r   r-   r#   r.   r/   c                 C   s   t S ©N©ÚRTR©ÚselfÚpayloadr:   r:   r;   Úguess_payload_class~   s    z$RTRCacheResponse.guess_payload_classN)r1   r2   r3   r4   r5   r   r6   r7   r   r   ÚSTATIC_CACHE_RESPONSE_LENGTHr9   rH   r:   r:   r:   r;   rA   p   s   

ýrA   c                   @   st   e Zd ZdZdZeddeƒeddeƒeddƒe	de
ƒed	dƒed
dƒeddƒeddƒeddƒe	ddƒg
Zdd„ ZdS )ÚRTRIPv4Prefixzc

    IPv4 Prefix packet from section 5.6
    https://tools.ietf.org/html/rfc6810#section-5.6

    r   r,   r   r-   r$   r?   r/   ÚflagsÚshortest_lengthÚlongest_lengthÚzerosÚprefixz0.0.0.0Úasnc                 C   s   t S rB   rC   rE   r:   r:   r;   rH   –   s    z!RTRIPv4Prefix.guess_payload_classN)r1   r2   r3   r4   r5   r   r6   r7   r   r   ÚSTATIC_IPV4_PREFIX_LENGTHr   r	   r9   rH   r:   r:   r:   r;   rJ   ‚   s   

÷rJ   c                   @   st   e Zd ZdZdZeddeƒeddeƒeddƒe	de
ƒed	dƒed
dƒeddƒeddƒeddƒe	ddƒg
Zdd„ ZdS )ÚRTRIPv6Prefixzc

    IPv6 Prefix packet from section 5.7
    https://tools.ietf.org/html/rfc6810#section-5.7

    r   r,   r   r-   r%   r?   r/   rK   rL   rM   rN   rO   z::rP   c                 C   s   t S rB   rC   rE   r:   r:   r;   rH   ®   s    z!RTRIPv6Prefix.guess_payload_classN)r1   r2   r3   r4   r5   r   r6   r7   r   r   ÚSTATIC_IPV6_PREFIX_LENGTHr   r
   r9   rH   r:   r:   r:   r;   rR   š   s   

÷rR   c                   @   sD   e Zd ZdZdZeddeƒeddeƒeddƒe	de
ƒe	d	dƒgZd
S )ÚRTREndofDatav0zv

    End of Data packet from version 0 standard section 5.8
    https://tools.ietf.org/html/rfc6810#section-5.8

    zEnd of Data - version 0r,   r   r-   r&   r.   r/   r0   N)r1   r2   r3   r4   r5   r   r6   r7   r   r   ÚSTATIC_END_OF_DATA_V0_LENGTHr9   r:   r:   r:   r;   rT   ²   s   

ürT   c                
   @   s\   e Zd ZdZdZeddeƒeddeƒeddƒe	d	e
ƒe	d
dƒe	ddƒe	ddƒe	ddƒgZdS )ÚRTREndofDatav1zv

    End of Data packet from version 1 standard section 5.8
    https://tools.ietf.org/html/rfc8210#section-5.8

    zEnd of Data - version 1r,   r   r-   r&   r.   r   r/   r0   Zrefresh_intervalZretry_intervalZexpire_intervalN)r1   r2   r3   r4   r5   r   r6   r7   r   r   ÚSTATIC_END_OF_DATA_V1_LENGTHr9   r:   r:   r:   r;   rV   Â   s   

ùrV   c                   @   s<   e Zd ZdZdZeddeƒeddeƒeddƒe	de
ƒgZd	S )
ÚRTRCacheResetzc

    Cache Reset packet from section 5.9
    https://tools.ietf.org/html/rfc6810#section-5.9

    r   r,   r   r-   r   r?   r/   N)r1   r2   r3   r4   r5   r   r6   r7   r   r   ÚSTATIC_CACHE_RESET_LENGTHr9   r:   r:   r:   r;   rX   Õ   s   

ýrX   c                   @   sn   e Zd ZdZdZeddeƒeddeƒeddƒed	dƒe	d
dƒe
dddƒe	ddƒedddd„ d�gZdd„ ZdS )ÚRTRRouterKeyzw

    Router Key packet from version 1 standard section 5.10
    https://tools.ietf.org/html/rfc8210#section-5.10

    r   r,   r   r-   r'   rK   r   rN   r/   NZsubject_key_identifierÚ r   rP   Zsubject_PKIc                 C   s
   | j d S )Nr   )r/   ©Úxr:   r:   r;   Ú<lambda>õ   ó    zRTRRouterKey.<lambda>©Zlength_fromc                 C   s>   t |ƒd }| js6|d d… t d|¡ |dd …  }|| S ©Nr"   ú!Ir%   ©Úlenr/   ÚstructÚpack©rF   ZpktZpayZtemp_lenr:   r:   r;   Ú
post_build÷   s    $zRTRRouterKey.post_build)r1   r2   r3   r4   r5   r   r6   r7   r   r   r   r   r9   rh   r:   r:   r:   r;   rZ   ä   s   


ÿù
rZ   c                   @   s‚   e Zd ZdZdZeddeƒeddeƒedde	ƒe
dd	ƒed
d	ddd�edddd„ d�edd	ddd�edddd„ d�gZdd„ Zd	S )ÚRTRErrorReportzf

    Error Report packet from section 5.10
    https://tools.ietf.org/html/rfc6810#section-5.10

    r    r,   r   r-   r(   Z
error_coder/   NÚlength_of_encaps_PDUrb   Zerroneous_PDU)ÚfmtZ	length_ofr[   c                 C   s   | j S rB   )rj   r\   r:   r:   r;   r^     r_   zRTRErrorReport.<lambda>r`   Úlength_of_error_textZ
error_textc                 C   s   | j S rB   )rl   r\   r:   r:   r;   r^     r_   c                 C   s>   t |ƒd }| js6|d d… t d|¡ |dd …  }|| S ra   rc   rg   r:   r:   r;   rh     s    $zRTRErrorReport.post_build)r1   r2   r3   r4   r5   r   r6   r7   r   Ú
ERROR_LISTr   r   r   r9   rh   r:   r:   r:   r;   ri   þ   s(   


ÿÿÿÿöri   )	r   r   r"   r#   r$   r%   r&   r   r(   )
r   r   r"   r#   r$   r%   r&   r   r'   r(   c                   @   s"   e Zd ZdZdZeddd„ƒZdS )rD   z†
    Dummy RPKI to Router generic packet for pre-sorting the packet type
    eg. https://tools.ietf.org/html/rfc6810#section-5.2

    zRTR dissectorNc                 O   sL   |rHt |ƒdkrHt|d ƒ}t|d ƒ}|dkr8t| S |dkrHt| S tS )zQ
          Attribution of correct type depending on version and pdu_type
        r"   r   r   )rd   r   ÚPDU_CLASS_VERSION_0ÚPDU_CLASS_VERSION_1r   )ÚclsZ_pktÚargsZkargsÚversionr-   r:   r:   r;   Údispatch_hook:  s    zRTR.dispatch_hook)N)r1   r2   r3   r4   r5   Úclassmethodrs   r:   r:   r:   r;   rD   1  s   rD   iC  )Údport)ZsportiZ   i®  Ú__main__)ÚinteractzRPKI to Router)ZmydictZmybanner)3r4   re   Zscapy.packetr   r   r   Zscapy.fieldsr   r   r   r   r	   r
   r   r   r   r   Zscapy.layers.inetr   Zscapy.compatr   r8   r=   r@   rY   rI   rQ   rS   rU   rW   r6   r7   rm   r+   r<   r>   rA   rJ   rR   rT   rV   rX   rZ   ri   rn   ro   rD   r1   Z
scapy.mainrw   Úglobalsr:   r:   r:   r;   Ú<module>   s¨   ÿöøø
÷
