a
    kÄ#dBÛ  ã                .   @   s   d Z ddlmZ ddlZddlZddl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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( dd
l)m*Z* ddl+m,  m-Z- dZ.dZ/e.e/ Z0dZ1dZ2dZ3e3Z4dZ5dZ6dZ7dZ8G dd„ deƒZ9G dd„ deƒZ:dddddœZ;dddddd d!d"d#œZ<d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d3d4d5d6œZ=d7d8d9d:d;d<d=d>d?d@dAdBdCdDœZ>dEdF„ Z?G dGdH„ dHeƒZ@G dIdJ„ dJeƒZAG dKdL„ dLeƒZBG dMdN„ dNeƒZCG dOdP„ dPeƒZDG dQdR„ dReƒZEG dSdT„ dTe@ƒZFG dUdV„ dVeGƒZHdWdXdYdZd[d\d]d^d_d`dadbdcdddeœZIddfdgdhdœZJdidjdkdldmdndodpdqdrdsœ
ZKdtdudvdwdxdydzd{d#œZLd|d}d~ddd€œZMd�d‚dƒd„d…d†d‡dd#œZNdtdˆd‰dŠd‹dŒd�œZOdŽd�d�d‘d’d“d”d•œZPdtd–d—d˜d™dšd›dœd#œZQG d�dž„ džeƒZRG dŸd „ d eƒZSG d¡d¢„ d¢eƒZTG d£d¤„ d¤eƒZUG d¥d¦„ d¦eƒZVG d§d¨„ d¨eƒZWG d©dª„ dªeƒZXG d«d¬„ d¬eƒZYG d­d®„ d®e@ƒZZd¯d°d±d²d³d´dµœZ[d¶d·d¸d¹œZ\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ÙdÚdÛdÜdÝdÞdßdàdádâdãdädådædçœ-Z]g dè¢Z^g dé¢Z_G dêdë„ dëeƒZ`G dìdí„ díeƒZaG dîdï„ dïeƒZbG dðdñ„ dñeƒZcG dòdó„ dóeƒZdG dôdõ„ dõeƒZeG död÷„ d÷eƒZfG dødù„ dùeƒZgG dúdû„ dûeƒZhG düdý„ dýeƒZig dþ¢ZjG dÿ�d „ �d eƒZkG �d�d„ �deƒZlg �d¢ZmG �d�d„ �deƒZnG �d�d„ �deƒZoG �d�d	„ �d	eƒZpG �d
�d„ �deƒZqG �d�d„ �deƒZrG �d�d„ �deƒZsG �d�d„ �deƒZtG �d�d„ �deƒZu�d�d�d�d�d�d�d�dd#œZve`eaebeceeefehegedeiekeleseteueoer�dœZwG �d�d„ �deƒZxG �d�d„ �deƒZydº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ÚdÛdÜdÝdÞdßdàdádâdãdädådædçœ-Z]G �d �d!„ �d!eƒZzG �d"�d#„ �d#eƒZ{G �d$�d%„ �d%e@ƒZ|ee$e@�d&�d'iƒ ee$e@�d(�d'iƒ ee$e@�d'�d'�d)œƒ dS (*  zO
NTP (Network Time Protocol).
References : RFC 5905, RC 1305, ntpd source code
é    )Úabsolute_importN)ÚPacketÚbind_layers)ÚBitFieldÚBitEnumFieldÚ	ByteFieldÚByteEnumFieldÚ
XByteFieldÚSignedByteFieldÚ
FlagsFieldÚ
ShortFieldÚLEShortFieldÚIntFieldÚ
LEIntFieldÚFixedPointFieldÚIPFieldÚStrFieldÚStrFixedLenFieldÚStrFixedLenEnumFieldÚXStrFixedLenFieldÚPacketFieldÚPacketLenFieldÚPacketListFieldÚFieldListFieldÚConditionalFieldÚPadField)ÚIP6Field)ÚUDP)Úlhex)Úorb)ÚconféD   é   é   é   é   l   €~T é€   c                   @   s   e Zd ZdZdd„ ZdS )ÚXLEShortFieldz>
    XShortField which value is encoded in little endian.
    c                 C   s   t |  ||¡ƒS ©N)r   Úi2h)ÚselfÚpktÚx© r-   úG/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/ntp.pyÚi2repr@   s    zXLEShortField.i2reprN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   r-   r-   r-   r.   r'   ;   s   r'   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTimeStampFieldzD
    This field handles the timestamp fields in the NTP header.
    c                 C   s   t  | ||dd¡ d S )Né@   é    )r   Ú__init__)r*   ÚnameÚdefaultr-   r-   r.   r7   I   s    zTimeStampField.__init__c                 C   s>   |d u rdS |   ||¡}|tk r$|S t dt t|t ƒ¡¡S )Nz--z%a, %d %b %Y %H:%M:%S +0000)r)   Ú_NTP_BASETIMEÚtimeÚstrftimeÚgmtimeÚint©r*   r+   Úvalr-   r-   r.   r/   L   s    þzTimeStampField.i2reprc                 C   sR   t |tjƒr&tt t |¡¡ƒt }nt |tjƒrDt| 	d¡ƒt }t
 | ||¡S )Nz%s)Ú
isinstanceÚsixÚstring_typesr>   r;   ÚmktimeÚstrptimer:   Údatetimer<   r   Úany2ir?   r-   r-   r.   rG   W   s
    zTimeStampField.any2ic                 C   s,   |d u rt  | |t ¡ t ¡}t  | ||¡S r(   )r   rG   r;   r:   Úi2mr?   r-   r-   r.   rH   ^   s    zTimeStampField.i2mN)r0   r1   r2   r3   r7   r/   rG   rH   r-   r-   r-   r.   r4   D   s
   r4   z
no warningz%last minute of the day has 61 secondsz%last minute of the day has 59 secondszunknown (clock unsynchronized))r   é   é   é   Úreservedzsymmetric activezsymmetric passiveÚclientÚserverÚ	broadcastzNTP control messagezreserved for private use)r   rI   rJ   rK   é   é   é   é   z*Geosynchronous Orbit Environment SatellitezGlobal Position SystemzGalileo Positioning SystemzGeneric pulse-per-secondz!Inter-Range Instrumentation Groupz$LF Radio WWVB Ft. Collins, CO 60 kHzz'LF Radio DCF77 Mainflingen, DE 77.5 kHzz LF Radio HBG Prangins, HB 75 kHzzLF Radio MSF Anthorn, UK 60 kHzz2LF Radio JJY Fukushima, JP 40 kHz, Saga, JP 60 kHzz!MF Radio LORAN C station, 100 kHzzMF Radio Allouis, FR 162 kHzzHF Radio CHU Ottawa, OntariozHF Radio WWV Ft. Collins, COzHF Radio WWVH Kauai, HIzNIST telephone modemzUSNO telephone modemzEuropean telephone modem)ZGOESzGPS zGAL zPPS ZIRIGZWWVBzDCF zHBG zMSF zJJY ZLORCzTDF zCHU zWWV ZWWVHZNISTZACTSZUSNOzPTB z,The association belongs to a unicast server.zServer authentication failed.zAutokey sequence failed.z.The association belongs to a broadcast server.z6Cryptographic authentication or identification failed.zAccess denied by remote server.zLost peer in symmetric mode.z"Access denied due to local policy.z<The association has not yet synchronized for the first time.z;The association belongs to a dynamically discovered server.zNo key found.zRate exceeded.z;Alteration of association from a remote host running ntpdc.)ZACSTZAUTHZAUTOZBCSTZCRYPZDENYZDROPZRSTRZINITZMCSTZNKEYZRATEZRMOTc                 C   sH   | du rt S t| ƒ}|tkrBt| d ƒ}|d@ }ttdœ |t ¡S tjS )z9
    Returns the right class for a given NTP packet.
    Nr   rS   )rR   rS   )	Ú	NTPHeaderÚlenÚ_NTP_PACKET_MIN_SIZEr   Ú
NTPControlÚ
NTPPrivateÚgetr    Ú	raw_layer)ÚpayloadÚlengthZ
first_byteÚmoder-   r-   r.   Ú_ntp_dispatcher©   s    r^   c                   @   s.   e Zd ZdZed	dd„ƒZdd„ Zdd„ ZdS )
ÚNTPz[
    Base class that allows easier instantiation of a NTP packet from binary
    data.
    Nc                 O   s   t |ƒS )z=
        Returns the right class for the given data.
        )r^   )ÚclsZ_pktÚargsZkargsr-   r-   r.   Údispatch_hookÁ   s    zNTP.dispatch_hookc                 C   s8   t |ƒ}|tk r4d |¡d }|d t¡7 }t|ƒ‚|S )zN
        Check that the payload is long enough to build a NTP packet.
        z ({}z is < _NTP_PACKET_MIN_SIZE z({})).)rU   rV   ÚformatÚ_NTPInvalidDataException)r*   Úsr\   Úerrr-   r-   r.   Úpre_dissectÉ   s    zNTP.pre_dissectc                 C   s
   |   d¡S )Nz!NTP v%ir,NTP.version%, %NTP.mode%)Zsprintf)r*   r-   r-   r.   Ú	mysummaryÔ   s    zNTP.mysummary)N)r0   r1   r2   r3   Úclassmethodrb   rg   rh   r-   r-   r-   r.   r_   »   s
   r_   c                   @   s   e Zd ZdZdd„ ZdS )Ú_NTPAuthenticatorPaddingFieldz_
    StrField handling the padding that may be found before the
    "authenticator" field.
    c                 C   s@   d }|}t |ƒ}|tkr8|t }|d |… }||d … }||fS r(   )rU   Ú_NTP_AUTH_MD5_TAIL_SIZE)r*   r+   re   ÚretÚremainr\   Ústartr-   r-   r.   ÚgetfieldÞ   s    z&_NTPAuthenticatorPaddingField.getfieldN)r0   r1   r2   r3   ro   r-   r-   r-   r.   rj   Ø   s   rj   c                   @   s@   e Zd ZdZdZeddƒeddƒedddd	„ d
�gZdd„ Z	dS )ÚNTPAuthenticatorz_
    Packet handling the "authenticator" part of a NTP packet, as
    defined in RFC 5905.
    ZAuthenticatorÚpaddingÚ Úkey_idr   Údgstc                 C   s   dS ©Nr"   r-   ©r,   r-   r-   r.   Ú<lambda>ô   ó    zNTPAuthenticator.<lambda>©Úlength_fromc                 C   s   d|fS ©Nrx   r-   ©r*   re   r-   r-   r.   Úextract_padding÷   s    z NTPAuthenticator.extract_paddingN)
r0   r1   r2   r3   r8   rj   r   r   Úfields_descr}   r-   r-   r-   r.   rp   ê   s   ýrp   c                   @   s<   e Zd ZdZdZeddƒeddƒeeddeƒdd	d
�gZ	dS )ÚNTPExtensionz,
    Packet handling a NTPv4 extension.
    Ú	extensionÚtyper   rU   Úvaluerr   rP   ó    )ÚalignÚpadwithN)
r0   r1   r2   r3   r8   r   r   r   r   r~   r-   r-   r-   r.   r   û   s   &ýr   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚNTPExtPacketListFieldzH
    PacketListField handling NTPv4 extensions (NTPExtension list).
    c                 C   s(   d }t |ƒdkrt|ƒ}n
t |¡}|S ru   )rU   r   r    rZ   ©r*   r+   Úmrl   r-   r-   r.   Úm2i0  s
    

zNTPExtPacketListField.m2ic                 C   sÐ   g }|}t |ƒ}|tkrÈ|t }|d |… }||d … }t |ƒ}|dkr®t d|dd… ¡d }	t|	|ƒ}	|	dk rv|}	|d |	… }
||	d … }|  ||
¡}| |¡ t |ƒ}q@|dkrÈ| |  ||¡¡ ||fS )Nr"   ú!HrJ   rP   r   rI   )rU   rk   ÚstructÚunpackÚminr‰   Úappend)r*   r+   re   Úlstrm   r\   ÚendÚ
extensionsZextensions_lenZext_lenÚcurrentÚcurrent_packetr-   r-   r.   ro   8  s*    


zNTPExtPacketListField.getfieldN©r0   r1   r2   r3   r‰   ro   r-   r-   r-   r.   r†   *  s   r†   c                   @   s.   e Zd ZdZdZedg eƒedeƒ eƒgZ	dS )ÚNTPExtensionszP
    Packet handling the NTPv4 extensions and the "MAC part" of the packet.
    zNTPv4 extensionsr‘   ÚmacN)
r0   r1   r2   r3   r8   r†   r   r   rp   r~   r-   r-   r-   r.   r•   S  s
   
þr•   c                   @   sÊ   e Zd ZdZd ZdZedddeƒedddƒed	dde	ƒed
ddƒedddƒedddƒe
ddddd�e
ddddd�eeddƒdd„ ƒeeddded�dd„ ƒeddƒeddƒeddƒed dƒgZd!d"„ ZdS )#rT   z2
    Packet handling the RFC 5905 NTP packet.
    TÚleapr   rJ   ÚversionrP   rK   r]   Ústratumr$   Úpollé
   Ú	precisionÚdelayr6   r"   ©ÚsizeZ	frac_bitsÚ
dispersionÚidz	127.0.0.1c                 C   s
   | j dkS ©NrI   ©r™   ©Úpr-   r-   r.   rw   ³  rx   zNTPHeader.<lambda>Zref_idrr   )r\   Úenumc                 C   s
   | j dk S )NrJ   r£   r¤   r-   r-   r.   rw   »  rx   ÚrefÚorigNÚrecvÚsentc                 C   s0   t |ƒ}|d dv rtS |tkr$tS t | |¡S )zV
        Handles NTPv4 extensions and MAC part (when authentication is used.)
        rP   )r"   r#   r6   r5   )rU   rp   rk   r•   r   Úguess_payload_class)r*   r[   Úplenr-   r-   r.   r«   Ã  s    zNTPHeader.guess_payload_class)r0   r1   r2   r3   r8   Úmatch_subclassr   Ú_leap_indicatorr   Ú
_ntp_modesr   r   r   r   Ú_reference_identifiersr4   r~   r«   r-   r-   r-   r.   rT   k  s6   ;



üù	êrT   c                   @   s   e Zd ZdZdd„ ZdS )rd   z]
    Raised when it is not possible to instantiate a NTP packet with the
    given data.
    c                 C   s   t  | d| ¡ d S )Nz,Data does not seem to be a valid NTP message)Ú	Exceptionr7   )r*   Údetailsr-   r-   r.   r7   ×  s    þz!_NTPInvalidDataException.__init__N)r0   r1   r2   r3   r7   r-   r-   r-   r.   rd   Ñ  s   rd   ZCTL_OP_UNSPECZCTL_OP_READSTATZCTL_OP_READVARZCTL_OP_WRITEVARZCTL_OP_READCLOCKZCTL_OP_WRITECLOCKZCTL_OP_SETTRAPZCTL_OP_ASYNCMSGZCTL_OP_CONFIGUREZCTL_OP_SAVECONFIGZCTL_OP_READ_MRUZCTL_OP_READ_ORDLIST_AZCTL_OP_REQ_NONCEZCTL_OP_UNSETTRAP)r   rI   rJ   rK   rP   rQ   rR   rS   r$   é	   r›   é   é   é   zlast minute was 61 secondszlast minute was 59 secondsz(alarm condition (clock not synchronized)zunspecified or unknownz Calibrated atomic clockz!VLF (band 4) or LF (band 5) radiozHF (band 7) radiozUHF (band 9) satellitez	local netzUDP/NTPzUDP/TIMEzeyeball-and-wristwatchztelephone modem)
r   rI   rJ   rK   rP   rQ   rR   rS   r$   r³   Úunspecifiedzsystem restartzsystem or hardware faultz<system new status word (leap bits or synchronization change)zMsystem new synchronization source or stratum (sys.peer or sys.stratum change)z8system clock reset (offset correction exceeds CLOCK.MAX)zsystem invalid time or datezsystem clock exceptionÚ
configuredzauthentication enabledzauthentication okayzreachability okay)r   rI   rJ   rK   rP   Zrejectedzpassed sanity checkszpassed correctness checkszpassed candidate checkszpassed outlyer checksz5current synchronization source; max distance exceededz1current synchronization source; max distance okayzpeer IP errorzpeer authentication failurezpeer unreachablezpeer reachablezpeer clock exception)r   rI   rJ   rK   rP   rQ   zclock operating within nominalszreply timeoutzbad reply formatzhardware or software faultzpropagation failurezbad date format or valuezbad time format or value)r   rI   rJ   rK   rP   rQ   rR   zauthentication failurez invalid message length or formatzinvalid opcodezunknown association identifierzunknown variable namezinvalid variable valuezadministratively prohibitedc                   @   s(   e Zd ZdZdZeddƒgZdd„ ZdS )ÚNTPStatusPacketz5
    Packet handling a non specific status word.
    Ústatusr   c                 C   s   d|fS r{   r-   r|   r-   r-   r.   r}   Y  s    zNTPStatusPacket.extract_paddingN)r0   r1   r2   r3   r8   r   r~   r}   r-   r-   r-   r.   r¹   Q  s   r¹   c                   @   sN   e Zd ZdZdZedddeƒedddeƒeddd	ƒed
dd	e	ƒgZ
dd„ ZdS )ÚNTPSystemStatusPacketz3
    Packet handling the system status fields.
    zsystem statusZleap_indicatorr   rJ   Zclock_sourcerR   Zsystem_event_counterrP   Zsystem_event_codec                 C   s   d|fS r{   r-   r|   r-   r-   r.   r}   k  s    z%NTPSystemStatusPacket.extract_paddingN)r0   r1   r2   r3   r8   r   Ú_system_statusesÚ_clock_sourcesr   Ú_system_event_codesr~   r}   r-   r-   r-   r.   r»   ]  s   
ür»   c                   @   st   e Zd ZdZdZedddƒedddƒedddƒedddƒed	ddƒed
ddeƒedddƒedddeƒgZ	dd„ Z
dS )ÚNTPPeerStatusPacketz1
    Packet handling the peer status fields.
    zpeer statusr¸   r   rI   Zauth_enabledZ	authenticZreachabilityrL   Zpeer_selrK   Zpeer_event_counterrP   Zpeer_event_codec                 C   s   d|fS r{   r-   r|   r-   r-   r.   r}   €  s    z#NTPPeerStatusPacket.extract_paddingN)r0   r1   r2   r3   r8   r   r   Ú_peer_selectionÚ_peer_event_codesr~   r}   r-   r-   r-   r.   r¿   o  s   





ør¿   c                   @   s6   e Zd ZdZdZedddeƒedddƒgZdd„ Z	d	S )
ÚNTPClockStatusPacketz2
    Packet handling the clock status fields.
    zclock statusZclock_statusr   r$   Úcodec                 C   s   d|fS r{   r-   r|   r-   r-   r.   r}   �  s    z$NTPClockStatusPacket.extract_paddingN)
r0   r1   r2   r3   r8   r   Ú_clock_statusesr   r~   r}   r-   r-   r-   r.   rÂ   „  s   
þrÂ   c                   @   s6   e Zd ZdZdZedddeƒedddƒgZdd„ Z	d	S )
ÚNTPErrorStatusPacketz2
    Packet handling the error status fields.
    zerror statusZ
error_coder   r$   rL   c                 C   s   d|fS r{   r-   r|   r-   r-   r.   r}   ž  s    z$NTPErrorStatusPacket.extract_paddingN)
r0   r1   r2   r3   r8   r   Ú_error_statusesr   r~   r}   r-   r-   r-   r.   rÅ   “  s   
þrÅ   c                   @   s   e Zd ZdZdd„ ZdS )ÚNTPControlStatusFieldzH
    This field provides better readability for the "status" field.
    c                 C   sº   d }t  d|dd… ¡d }|jdkr0t|ƒ}n†|jdkrV|dkrLt|ƒ}q¶t|ƒ}n`|jdkr||dkrrt|ƒ}q¶t|ƒ}n:|jdkr�t|ƒ}n&|jdks¤|jdkr®t|ƒ}nt|ƒ}|S )NrŠ   rJ   rP   r   rI   rK   rQ   )	r‹   rŒ   rf   rÅ   Úop_coder¿   r»   r¹   rÂ   )r*   r+   rˆ   rl   Úassociation_idr-   r-   r.   r‰   °  s$    










zNTPControlStatusField.m2iN)r0   r1   r2   r3   r‰   r-   r-   r-   r.   rÇ   ¢  s   rÇ   c                   @   s,   e Zd ZdZdZeddƒedeƒ eƒgZdS )ÚNTPPeerStatusDataPacketzr
    Packet handling the data field when op_code is CTL_OP_READSTAT
    and the association_id field is null.
    zdata / peer statusrÉ   r   Zpeer_statusN)	r0   r1   r2   r3   r8   r   r   r¿   r~   r-   r-   r-   r.   rÊ   Ó  s
   þrÊ   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚNTPControlDataPacketLenFieldzH
    PacketField handling the "data" field of NTP control messages.
    c                 C   s<   d }|j dkr.|jdkr"t|ƒ}q8t |¡}n
t |¡}|S )NrI   r   )rÈ   rÉ   rÊ   r    rZ   r‡   r-   r-   r.   r‰   æ  s    



z NTPControlDataPacketLenField.m2ic                 C   s�   |   |¡}d }|dkr8td|ƒ}|d r8|d|d  7 }z|  ||d |… ¡}W n. ty~   tjrf‚ tj|d |… d�}Y n0 ||d … |fS )Nr   rµ   rP   )Úload)rz   Úmaxr‰   r±   r    Zdebug_dissectorrZ   )r*   r+   re   r\   Úir-   r-   r.   ro   õ  s    

z%NTPControlDataPacketLenField.getfieldNr”   r-   r-   r-   r.   rË   à  s   rË   c                   @   sÎ   e Zd ZdZdZdZedddƒedddƒed	d
dƒedddƒedddƒedddƒedddeƒe	ddƒe
eddeƒdd„ ƒe
e	ddƒdd„ ƒe	ddƒe	ddƒe	ddƒeddedd„ d�eddeƒgZd d!„ ZdS )"rW   z:
    Packet handling NTP mode 6 / "Control" messages.
    zControl messageTZzerosr   rJ   r˜   rK   r]   rR   ÚresponserI   rf   ÚmorerÈ   rQ   ÚsequenceZstatus_wordrr   c                 C   s
   | j dkS r¢   ©rÏ   r¤   r-   r-   r.   rw   &  rx   zNTPControl.<lambda>rº   c                 C   s
   | j dkS ©Nr   rÒ   r¤   r-   r-   r.   rw   '  rx   rÉ   ÚoffsetÚcountNÚdatac                 C   s   | j S r(   )rÕ   r¤   r-   r-   r.   rw   ,  rx   ry   Úauthenticatorc                 C   sJ   | j d u rBd}| jrt| jƒ}|d d… t d|¡ |dd …  }|| S )Nr   r´   rŠ   é   )rÕ   rÖ   rU   r‹   Úpack)r*   r¥   Zpayr\   r-   r-   r.   Ú
post_build0  s    

$zNTPControl.post_build)r0   r1   r2   r3   r8   r­   r   r   Ú	_op_codesr   r   rÇ   r   rË   r   rp   r~   rÚ   r-   r-   r-   r.   rW     s4   





ÿÿÿ
ïrW   Z	INFO_OKAYZINFO_ERR_IMPLZINFO_ERR_REQZINFO_ERR_FMTZINFO_ERR_NODATAZINFO_ERR_AUTH)r   rI   rJ   rK   rP   rS   Z	IMPL_UNIVZIMPL_XNTPD_OLDZXNTPD)r   rJ   rK   ZREQ_PEER_LISTZREQ_PEER_LIST_SUMZREQ_PEER_INFOZREQ_PEER_STATSZREQ_SYS_INFOZREQ_SYS_STATSZREQ_IO_STATSZREQ_MEM_STATSZREQ_LOOP_INFOZREQ_TIMER_STATSZ
REQ_CONFIGZREQ_UNCONFIGZREQ_SET_SYS_FLAGZREQ_CLR_SYS_FLAGZREQ_MONITORZREQ_NOMONITORZREQ_GET_RESTRICTZREQ_RESADDFLAGSZREQ_RESSUBFLAGSZREQ_UNRESTRICTZREQ_MON_GETLISTZREQ_RESET_STATSZREQ_RESET_PEERZREQ_REREAD_KEYSZREQ_DO_DIRTY_HACKZREQ_DONT_DIRTY_HACKZREQ_TRUSTKEYZREQ_UNTRUSTKEYZREQ_AUTHINFOZ	REQ_TRAPSZREQ_ADD_TRAPZREQ_CLR_TRAPZREQ_REQUEST_KEYZREQ_CONTROL_KEYZREQ_GET_CTLSTATSZREQ_GET_LEAPINFOZREQ_GET_CLOCKINFOZREQ_SET_CLKFUDGEZREQ_GET_KERNELZREQ_GET_CLKBUGINFOZREQ_SET_PRECISIONZREQ_MON_GETLIST_1ZREQ_HOSTNAME_ASSOCIDZREQ_IF_STATSZREQ_IF_RELOAD)-r   rI   rJ   rK   rP   rQ   rR   rS   r$   r³   r›   r´   rµ   rØ   é   é   r"   é   é   é   r#   é   é   é   é   é   é   é   r%   é   é   r¶   r6   é!   é"   é#   é$   é%   é&   é'   é)   é*   é+   é,   é-   )	ZINFO_FLAG_CONFIGZINFO_FLAG_SYSPEERZINFO_FLAG_BURSTZINFO_FLAG_REFCLOCKZINFO_FLAG_PREFERZINFO_FLAG_AUTHENABLEZINFO_FLAG_SEL_CANDIDATEZINFO_FLAG_SHORTLISTZINFO_FLAG_IBURST)ZINFO_FLAG_BCLIENTZINFO_FLAG_AUTHENTICATEZINFO_FLAG_NTPZINFO_FLAG_KERNELZINFO_FLAG_CALZINFO_FLAG_PPS_SYNCZINFO_FLAG_MONITORZINFO_FLAG_FILEGENc                	   @   sV   e Zd ZdZdZeddƒeddƒeddeƒe	ddd	e
ƒed
dƒeddƒeddƒgZdS )ÚNTPInfoPeerListz,
    Used to return raw lists of peers.
    Zinfo_peer_listÚaddrú0.0.0.0Úportr   ÚhmodeÚflagsr$   Úv6_flagÚunused1Úaddr6ú::N)r0   r1   r2   r3   r8   r   r   r   r¯   r   Ú_peer_flagsr   r   r~   r-   r-   r-   r.   rö   š  s   
ùrö   c                   @   s¨   e Zd ZdZdZeddƒeddƒeddƒeddƒed	dƒed
dƒeddƒeddde	ƒede
ƒeddddd�eddƒeddddd�eddƒeddƒeddƒeddƒgZdS )ÚNTPInfoPeerSummaryz9
    Sort of the info that ntpdc returns by default.
    Zinfo_peer_summaryÚdstaddrrø   ÚsrcaddrÚsrcportr   r™   ÚhpollÚppollÚreachrû   r$   rú   r�   r6   r"   rž   rÔ   r    rü   rý   Údstaddr6rÿ   Úsrcaddr6N)r0   r1   r2   r3   r8   r   r   r   r   r   r¯   r   r4   r   r   r~   r-   r-   r-   r.   r  «  s&   ðr  c                2   @   s(  e Zd ZdZdZeddƒeddƒeddƒeddd	eƒe	d
dƒe
ddeƒe	ddƒe	ddƒe	ddƒe	ddƒeddƒe	ddƒe	ddƒe	ddƒe	ddƒeddƒe	ddƒeddƒeddƒeddƒeddƒeddƒeddƒeddddd �ed!dddd �ed"dƒed#dƒed$dƒed%dƒed&d'd(„ edeƒD ƒed)dddd �d*d+„ d,�ed-d.d(„ edeƒD ƒed)dƒd/d+„ d,�ed0d1d(„ edeƒD ƒe	d)dƒd2d+„ d,�ed3dddd �ed4dddd �ed5dƒed6dddd �ed7dƒed8dƒed9dƒed:dƒed;dƒed<dƒed=dƒed>dddd �ed?dƒed@dƒedAdBƒedCdBƒg0ZdDS )EÚNTPInfoPeerz%
    Peer information structure.
    Z	info_peerr  rø   r  r  r   rû   r$   r—   rú   Zpmoder™   r  r  rœ   r˜   Úunused8r  ZunreachZflashÚttlZflash2ZassocidÚkeyidZpkeyidÚrefidÚtimerÚ	rootdelayr6   r"   rž   ÚrootdispersionÚreftimeÚorgZrecZxmtZ	filtdelayc                 C   s   g | ]}d ‘qS ©g        r-   ©Ú.0rÎ   r-   r-   r.   Ú
<listcomp>ê  rx   zNTPInfoPeer.<listcomp>rr   c                 C   s   t S r(   ©Ú
_NTP_SHIFTr¤   r-   r-   r.   rw   ì  rx   zNTPInfoPeer.<lambda>©Ú
count_fromZ
filtoffsetc                 C   s   g | ]}d ‘qS r  r-   r  r-   r-   r.   r  ð  rx   c                 C   s   t S r(   r  r¤   r-   r-   r.   rw   ò  rx   Úorderc                 C   s   g | ]}d ‘qS )r   r-   r  r-   r-   r.   r  ö  rx   c                 C   s   t S r(   r  r¤   r-   r-   r.   rw   ø  rx   r�   r    rÔ   Z
selectdisprý   Úunused2Úunused3Úunused4Úunused5Úunused6Úunused7Z	estbdelayrü   Úunused9r  rÿ   r	  N)r0   r1   r2   r3   r8   r   r   r   r   r   r   r¯   r
   r	   r'   r   r   r   r4   r   Úranger  r   r~   r-   r-   r-   r.   r
  Ä  s„   
üüüÁr
  c                   @   sü   e Zd ZdZdZeddƒeddƒeddƒeddd	eƒe	d
dƒe	ddƒe	ddƒe	ddƒe	ddƒe	ddƒe	ddƒe	ddƒe	ddƒe	ddƒe	ddƒe	ddƒe	ddƒe	ddƒe	ddƒe	ddƒe
ddƒe
ddƒe
ddƒe
ddƒe	ddƒe	ddƒed d!ƒed"d!ƒgZd#S )$ÚNTPInfoPeerStatsz$
    Peer statistics structure.
    Zinfo_peer_statsr  rø   r  r  r   rû   r"   Ú	timeresetZtimereceivedZ
timetosendZtimereachablerª   rý   Ú	processedr  ÚbadauthZbogusorgZoldpktr  r  ZseldispZ	selbrokenr   Ú	candidater!  r"  r  rü   r#  r  rÿ   r	  N)r0   r1   r2   r3   r8   r   r   r   r   r   r   r   r~   r-   r-   r-   r.   r%    s>   är%  c                   @   s8   e Zd ZdZdZeddƒeddƒeddƒeddƒgZdS )	ÚNTPInfoLoopz 
    Loop filter variables.
    Z	info_loopZlast_offsetr   Z
drift_compZ
complianceZwatchdog_timerN)r0   r1   r2   r3   r8   r4   r   r~   r-   r-   r-   r.   r*  3  s   ür*  c                   @   sâ   e Zd ZdZdZeddƒeddƒeddƒeddƒed	dƒed
dddd�eddddd�eddƒeddƒe	ddƒe
dddeƒeddƒeddƒeddƒeddddd�eddddd�eddƒeddddd�e	ddƒe	ddƒeddƒgZdS ) Ú
NTPInfoSysz_
    System info. Mostly the sys.* variables, plus a few unique to
    the implementation.
    Zinfo_sysZpeerrø   Z	peer_moder   r—   r™   rœ   r  r6   r"   rž   r  r  r  rš   rû   r$   rý   r  r  ZbdelayZ	frequencyZ	authdelayZ	stabilityrü   r  Zpeer6rÿ   N)r0   r1   r2   r3   r8   r   r   r   r4   r   r   Ú_sys_info_flagsr   r~   r-   r-   r-   r.   r+  A  s0   ër+  c                   @   sp   e Zd ZdZdZeddƒeddƒeddƒeddƒeddƒed	dƒed
dƒeddƒeddƒeddƒeddƒgZdS )ÚNTPInfoSysStatszC
    System stats. These are collected in the protocol module.
    Zinfo_sys_statsZtimeupr   r&  ZdeniedZoldversionpktZnewversionpktZunknownversionZ	badlengthr'  r(  ÚreceivedZlimitrejectedN©r0   r1   r2   r3   r8   r   r~   r-   r-   r-   r.   r-  a  s   õr-  c                   @   sp   e Zd ZdZdZeddƒeddƒeddƒeddƒeddƒed	dƒed
dd„ ede	ƒD ƒe
ddƒdd„ d�gZdS )ÚNTPInfoMemStatsz!
    Peer memory statistics.
    Zinfo_mem_statsr&  r   ZtotalpeermemZfreepeermemZfindpeer_callsZallocationsZdemobilizationsZ	hashcountc                 C   s   g | ]}d ‘qS r  r-   r  r-   r-   r.   r  …  rx   zNTPInfoMemStats.<listcomp>rr   c                 C   s   t S r(   )Ú_NTP_HASH_SIZEr¤   r-   r-   r.   rw   ‡  rx   zNTPInfoMemStats.<lambda>r  N)r0   r1   r2   r3   r8   r   r   r   r$  r1  r   r~   r-   r-   r-   r.   r0  v  s   üùr0  c                   @   sx   e Zd ZdZdZeddƒeddƒeddƒeddƒeddƒed	dƒed
dƒeddƒeddƒeddƒeddƒeddƒgZdS )ÚNTPInfoIOStatsz
    I/O statistics.
    Zinfo_io_statsr&  r   ZtotalrecvbufsZfreerecvbufsZfullrecvbufsZlowwaterZdroppedZignoredr.  rª   ÚnotsentZ
interruptsZint_receivedN©r0   r1   r2   r3   r8   r   r   r~   r-   r-   r-   r.   r2  Œ  s   ôr2  c                   @   s8   e Zd ZdZdZeddƒeddƒeddƒeddƒgZdS )	ÚNTPInfoTimerStatsz
    Timer stats.
    Zinfo_timer_statsr&  r   ZalarmsZ	overflowsZxmtcallsNr/  r-   r-   r-   r.   r5  ¢  s   ür5  )ZCONF_FLAG_AUTHENABLEZCONF_FLAG_PREFERZCONF_FLAG_BURSTZCONF_FLAG_IBURSTZCONF_FLAG_NOSELECTZCONF_FLAG_SKEYc                   @   sˆ   e Zd ZdZdZeddƒeddƒeddƒeddƒed	dƒed
ddeƒeddƒe	ddƒe
ddƒedddd�e
ddƒe
ddƒeddƒgZdS )ÚNTPConfPeerz?
    Structure for passing peer configuration information.
    Z	conf_peerÚpeeraddrrø   rú   r   r˜   ZminpollZmaxpollrû   r$   r  rý   r  Zkeystrrr   r&   ©r\   rü   r  Ú	peeraddr6rÿ   N)r0   r1   r2   r3   r8   r   r   r   Ú_conf_peer_flagsr   r   r   r   r~   r-   r-   r-   r.   r6  º  s    ór6  c                   @   s0   e Zd ZdZdZeddƒeddƒeddƒgZd	S )
ÚNTPConfUnpeerz:
    Structure for passing peer deletion information.
    Zconf_unpeerr7  rø   rü   r   r9  rÿ   N)	r0   r1   r2   r3   r8   r   r   r   r~   r-   r-   r-   r.   r;  Ñ  s   ýr;  )Z
RES_IGNOREZRES_DONTSERVEZRES_DONTTRUSTZRES_VERSIONZ
RES_NOPEERZRES_LIMITEDZRES_NOQUERYZRES_NOMODIFYZ
RES_NOTRAPZ
RES_LPTRAPZRES_KODZ
RES_MSSNTPZ	RES_FLAKEZRES_NOMRULISTc                	   @   sT   e Zd ZdZdZeddƒeddƒedddeƒed	dƒe	d
dƒe
ddƒe
ddƒgZdS )ÚNTPConfRestrictz9
    Structure used for specifying restrict entries.
    Zconf_restrictr÷   rø   Úmaskrû   r   r"   Zm_flagsrü   rþ   rÿ   Zmask6N)r0   r1   r2   r3   r8   r   r   Ú_restrict_flagsr   r   r   r~   r-   r-   r-   r.   r<  ð  s   ùr<  c                   @   s˜   e Zd ZdZdZeddƒeddƒeddƒeddƒeddƒed	dƒed
dƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒgZdS )ÚNTPInfoKernelzA
    Structure used for returning kernel pll/PPS information
    Zinfo_kernelrÔ   r   ÚfreqZmaxerrorZesterrorrº   ÚshiftZconstantrœ   Z	toleranceZppsfreqÚjitterZstabilZjitcntZcalcntZerrcntZstbcntNr4  r-   r-   r-   r.   r?    s&   ðr?  c                   @   sÚ   e Zd ZdZdZeeddƒddd�eeddƒddd�eed	dƒddd�ed
dƒedddd�eddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒe	ddƒe
ddƒe
ddƒeddƒgZdS ) ÚNTPInfoIfStatsIPv4ú
    Interface statistics.
    Úinfo_if_statsÚunaddrrø   r"   rƒ   )r…   ÚunbcastÚunmaskrü   r   Úifnamerr   r6   r8  rû   Úlast_ttlÚ	num_mcastr.  rª   r3  ÚuptimeÚscopeidÚifindexÚifnumÚpeercntÚfamilyÚignore_packetsÚactionÚ_filler0N)r0   r1   r2   r3   r8   r   r   r   r   r   r   r~   r-   r-   r-   r.   rC    s.   ìrC  c                   @   s¼   e Zd ZdZdZeddƒeddƒeddƒeddƒed	d
dd�eddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒe	ddƒe	ddƒeddƒgZ
dS )ÚNTPInfoIfStatsIPv6rD  rE  rF  rÿ   rG  rH  rü   r   rI  rr   r6   r8  rû   rJ  rK  r.  rª   r3  rL  rM  rN  rO  rP  rQ  rR  rS  rT  N)r0   r1   r2   r3   r8   r   r   r   r   r   r~   r-   r-   r-   r.   rU  9  s.   ìrU  c                   @   sˆ   e Zd ZdZdZeddƒeddƒeddƒeddƒedd	ƒed
d	ƒeddƒeddƒeddƒeddƒeddƒeddƒe	ddƒe	ddƒgZ
dS )ÚNTPInfoMonitor1z4
    Structure used for returning monitor data.
    ZInfoMonitor1Zlasttimer   Z	firsttimeZlastdroprÕ   r÷   rø   Zdaddrrû   rù   r]   r˜   rü   rý   rþ   rÿ   Zdaddr6N)r0   r1   r2   r3   r8   r   r   r   r   r   r~   r-   r-   r-   r.   rV  W  s"   òrV  c                   @   s`   e Zd ZdZdZeddƒeddƒeddƒeddƒeddƒed	dƒed
dƒeddƒeddƒg	ZdS )ÚNTPInfoAuthzT
    Structure used to return information concerning the authentication module.
    Z	info_authr&  r   ZnumkeysZnumfreekeysZ
keylookupsZkeynotfoundZencryptionsZdecryptionsZexpiredZkeyuncachedNr/  r-   r-   r-   r.   rW  o  s   ÷rW  c                	   @   sP   e Zd ZdZdZeddƒeddƒeddƒeddƒed	dƒed
dƒeddƒgZ	dS )ÚNTPConfTrapzI
    Structure used to pass add/clear trap information to the client
    Z	conf_trapÚlocal_addressrø   Ztrap_addressZ	trap_portr   Zunusedrü   Zlocal_address6rÿ   Ztrap_address6N)
r0   r1   r2   r3   r8   r   r   r   r   r~   r-   r-   r-   r.   rX  ‚  s   ùrX  c                   @   s�   e Zd ZdZdZeddƒeddƒeddƒeddƒeddƒed	dƒed
dƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒgZdS )ÚNTPInfoControlzF
    Structure used to return statistics from the control module.
    Zinfo_controlZctltimeresetr   Z	numctlreqZnumctlbadpktsZnumctlresponsesZnumctlfragsZnumctlerrorsZnumctltooshortZnumctlinputrespZnumctlinputfragZnumctlinputerrZnumctlbadoffsetZnumctlbadversionZnumctldatatooshortZnumctlbadopZnumasyncmsgsNr/  r-   r-   r-   r.   rZ  “  s$   ñrZ  zno errorz"incompatible implementation numberzunimplemented request codez<format error (wrong data items, data size, packet size etc.)z<no data available (e.g. request for details on unknown peer)zI don"t knowz/authentication failure (i.e. permission denied))r   rI   rJ   rK   rP   rQ   rR   rS   r$   r³   r›   r´   r%   ré   rë   rï   rò   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚNTPPrivateRespPacketListFieldz5
    PacketListField handling the response data.
    c                 C   s^   d }|j dks|j dkrFt d|dd… ¡d }|r<t|ƒnt|ƒ}nt |j tj¡|ƒ}|S )Nrô   rõ   z!Ié0   é4   r   )	Úrequest_coder‹   rŒ   rU  rC  Ú_private_data_objectsrY   r    rZ   )r*   r+   re   rl   Zis_v6r-   r-   r.   r‰   Ô  s    z!NTPPrivateRespPacketListField.m2ic           	      C   sr   g }|}|j }|dkrjd}t|ƒ|j krj||jk rj|d |… }||d … }|  ||¡}| |¡ |d7 }q||fS ©Nr   rI   )Údata_item_sizerU   Únb_itemsr‰   rŽ   )	r*   r+   re   r�   rm   r\   Úitem_counterr’   r“   r-   r-   r.   ro   à  s    

z&NTPPrivateRespPacketListField.getfieldNr”   r-   r-   r-   r.   r[  Ï  s   r[  c                   @   s    e Zd ZdZdZeddƒgZdS )ÚNTPPrivateReqPacketz'
    Packet handling request data.
    zrequest dataÚreq_datarr   N)r0   r1   r2   r3   r8   r   r~   r-   r-   r-   r.   rd  ñ  s   rd  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚNTPPrivateReqPacketListFieldz+
    Handles specific request packets.
    c                 C   s°   d }|j dks|j dkr"t|ƒ}nŠ|j dkr6t|ƒ}nv|j dkrJt|ƒ}nb|j dkr^t|ƒ}nN|j dkrrt|ƒ}n:|j dkr†t|ƒ}n&|j dksš|j d	kr¤t|ƒ}nt|ƒ}|S )
NrJ   rK   r›   r´   rÞ   rß   râ   ré   r¶   )r^  rö   r6  r;  r<  rX  rd  )r*   r+   re   rl   r-   r-   r.   r‰   2  s"    











z NTPPrivateReqPacketListField.m2ic           
      C   s²   g }|}|j }|dkrpd}t|ƒ|j |j krp||jk rp|d |… }||d … }|  ||¡}| |¡ |d7 }q|jrªt|ƒt }	t |d |	… ¡}| |¡ ||	d … }||fS r`  )	ra  rU   rb  r‰   rŽ   ÚauthÚ_NTP_PRIVATE_REQ_PKT_TAIL_LENr    rZ   )
r*   r+   re   r�   rm   r\   rc  r’   r“   Zpadding_endr-   r-   r.   ro   W  s"    


z%NTPPrivateReqPacketListField.getfieldNr”   r-   r-   r-   r.   rf  +  s   %rf  c                   @   s8   e Zd ZdZdZeddƒeddƒedddd	„ d
�gZdS )ÚNTPPrivatePktTailzˆ
    include/ntp_request.h
    The req_pkt_tail structure is used by ntpd to adjust for different
    packet sizes that may arrive.
    Zreq_pkt_tailZtstampr   rs   rt   rr   c                 C   s   t S r(   )Ú_NTP_AUTH_MD5_DGST_SIZErv   r-   r-   r.   rw   z  rx   zNTPPrivatePktTail.<lambda>ry   N)	r0   r1   r2   r3   r8   r4   r   r   r~   r-   r-   r-   r.   ri  n  s   
ÿýri  c                   @   sî   e Zd ZdZdZdZedddƒedddƒedd	d
ƒeddd
ƒedddƒedddƒeddeƒedde	ƒe
dddeƒedddƒedddƒedddƒeedg edd„ dd„ d�dd„ ƒeedg edd„ dd„ d�d d„ ƒeed!d"eƒd#d„ ƒgZd$S )%rX   z8
    Packet handling the private (mode 7) messages.
    zPrivate (mode 7)TrÏ   r   rI   rÐ   r˜   rJ   rK   r]   rg  ÚseqrS   Úimplementationr^  rf   rP   rb  rµ   Zmbzra  re  c                 C   s   | j S r(   ©ra  r¤   r-   r-   r.   rw     rx   zNTPPrivate.<lambda>c                 C   s   | j S r(   ©rb  r¤   r-   r-   r.   rw     rx   )rz   r  c                 C   s
   | j dkS rÓ   rÒ   r¤   r-   r-   r.   rw     rx   rÖ   c                 C   s   | j S r(   rm  r¤   r-   r-   r.   rw     rx   c                 C   s   | j S r(   rn  r¤   r-   r-   r.   rw     rx   c                 C   s
   | j dkS r¢   rÒ   r¤   r-   r-   r.   rw     rx   r×   rr   c                 C   s   | j dko| jdkS r`  )rÏ   rg  r¤   r-   r-   r.   rw     rx   N)r0   r1   r2   r3   r8   r­   r   r   Ú_implementationsÚ_request_codesr   Ú_ntpd_private_errorsr   rf  r   r[  r   ri  r~   r-   r-   r-   r.   rX   ~  sN   p










ûøûøÿÝrX   Úsporté{   Údport)rr  rt  )}r3   Ú
__future__r   r‹   r;   rF   Zscapy.packetr   r   Zscapy.fieldsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zscapy.layers.inet6r   Zscapy.layers.inetr   Zscapy.utilsr   Zscapy.compatr   Zscapy.configr    Zscapy.libs.sixZlibsrB   Z_NTP_AUTH_MD5_MIN_SIZEZ_NTP_EXT_MIN_SIZEZ_NTP_HDR_WITH_EXT_MIN_SIZErk   rj  Z_NTP_PRIVATE_PACKET_MIN_SIZErV   rh  r:   r  r1  r'   r4   r®   r¯   r°   Z_kiss_codesr^   r_   rj   rp   r   r†   r•   rT   r±   rd   rÛ   r¼   r½   r¾   Z_peer_statusesrÀ   rÁ   rÄ   rÆ   r¹   r»   r¿   rÂ   rÅ   rÇ   rÊ   rË   rW   Z_information_error_codesro  rp  r   r,  rö   r  r
  r%  r*  r+  r-  r0  r2  r5  r:  r6  r;  r>  r<  r?  rC  rU  rV  rW  rX  rZ  rq  r_  r[  rd  rf  ri  rX   r-   r-   r-   r.   Ú<module>   sš  d	&ü
øíó/)fòü	öøû
øúùø1,2úýÓ2I& 

øï"
Ó1C  