
    h                     &   d 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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	Z)d
Z*e)e*z   Z+dZ,d
Z-dZ.e.Z/dZ0dZ1dZ2dZ3 G d de          Z4 G d de          Z5dddddZ6dddddddd d!Z7i d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdAdCdDdEZ8dFdGdHdIdJdKdLdMdNdOdPdQdRdSZ9dT Z: G dU dVe          Z; G dW dXe          Z< G dY dZe          Z= G d[ d\e          Z> G d] d^e          Z? G d_ d`e          Z@ G da dbe;          ZA G dc ddeB          ZCdedfdgdhdidjdkdldmdndodpdqdrdsZDddtdudvdZEdwdxdydzd{d|d}d~ddd
ZFddddddddd!ZGddddddZHddddddddd!ZIdddddddZJddddddddZKddddddddd!ZL G d de          ZM G d de          ZN G d de          ZO G d de          ZP G d de          ZQ G d de          ZR G d de          ZS G d de          ZT G d de;          ZUdddddddÜZVddddǜZWi ddȓddʓdd̓ddΓddГddғddԓdd֓ddדddٓddۓddݓddߓddddddd
di dddddddddddddddddddddddddddd ddddddddd	d
ddddddddZXg dZYg dZZ 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          Za G d# d$e          Zb G d% d&e          Zc G d' d(e          Zdg d)Ze G d* d+e          Zf G d, d-e          Zgg d.Zh G d/ d0e          Zi G d1 d2e          Zj G d3 d4e          Zk G d5 d6e          Zl G d7 d8e          Zm G d9 d:e          Zn G d; d<e          Zo G d= d>e          Zpd?d@dAdBdCdDdDdEd!Zqi de[de\de]de^de`deadecdebde_deddefdegdendeodFepdGejdHemZr G dI dJe          Zs G dK dLe          Zti ddȓddʓdd̓ddΓddГddғddԓdd֓ddדddٓddۓddݓddߓddddddd
di dddddddddddddddddddddddddddd ddddddddd	d
ddddddddZX G dM dNe          Zu G dO dPe          Zv G dQ dRe;          Zw ee"e;dSdTi            ee"e;dUdTi            ee"e;dTdTdV           dS (W  zO
NTP (Network Time Protocol).
References : RFC 5905, RC 1305, ntpd source code
    N)Packetbind_layers)BitEnumFieldBitFieldByteEnumField	ByteFieldConditionalFieldFieldListFieldFixedPointField
FlagsFieldIP6FieldIPFieldIntField
LEIntFieldLEShortFieldMayEndPacketFieldPacketLenFieldPacketListFieldPadField
ShortFieldSignedByteFieldStrFieldStrFixedLenEnumFieldStrFixedLenField
XByteFieldXStrFixedLenField)UDP)lhex)orb)confD               l   ~T    c                       e Zd ZdZd ZdS )XLEShortFieldz>
    XShortField which value is encoded in little endian.
    c                 H    t          |                     ||                    S N)r   i2h)selfpktxs      T/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/ntp.pyi2reprzXLEShortField.i2reprR   s    DHHS!$$%%%    N)__name__
__module____qualname____doc__r1    r2   r0   r)   r)   M   s-         & & & & &r2   r)   c                   *    e Zd ZdZd Zd Zd Zd ZdS )TimeStampFieldzD
    This field handles the timestamp fields in the NTP header.
    c                 6    t          j        | ||dd           d S )N@       )r   __init__)r-   namedefaults      r0   r=   zTimeStampField.__init__[   s!     tWb"=====r2   c           	          |dS |                      ||          }|t          k     rt          |          S t          j        dt          j        t          |t          z
                                S )Nz--z%a, %d %b %Y %H:%M:%S +0000)r,   _NTP_BASETIMEstrtimestrftimegmtimeintr-   r.   vals      r0   r1   zTimeStampField.i2repr^   sf    ;4hhsC  s88O})KC-/0011
 
 	
r2   c                 X   t          |t                    r<t          t          j        t          j        |                              t          z   }nDt          |t          j                  r*t          |                    d                    t          z   }t          j
        | ||          S )Nz%s)
isinstancerB   rF   rC   mktimestrptimerA   datetimerD   r   any2irG   s      r0   rN   zTimeStampField.any2ii   s    c3 	:dk$-"4"45566FCCX.// 	:cll4(())M9C$T3444r2   c                     |/t          j        | |t          j                    t          z             }t          j        | ||          S r+   )r   rN   rC   rA   i2mrG   s      r0   rP   zTimeStampField.i2mp   s;    ;!'c49;;3NOOC"4c222r2   N)r3   r4   r5   r6   r=   r1   rN   rP   r7   r2   r0   r9   r9   V   sZ         > > >	
 	
 	
5 5 53 3 3 3 3r2   r9   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   rQ   rR   rS               GOESz*Geosynchronous Orbit Environment SatellitezGPS zGlobal Position SystemzGAL zGalileo Positioning SystemzPPS zGeneric pulse-per-secondIRIGz!Inter-Range Instrumentation GroupWWVBz$LF Radio WWVB Ft. Collins, CO 60 kHzzDCF z'LF Radio DCF77 Mainflingen, DE 77.5 kHzzHBG z LF Radio HBG Prangins, HB 75 kHzzMSF zLF Radio MSF Anthorn, UK 60 kHzzJJY z2LF Radio JJY Fukushima, JP 40 kHz, Saga, JP 60 kHzLORCz!MF Radio LORAN C station, 100 kHzzTDF zMF Radio Allouis, FR 162 kHzzCHU zHF Radio CHU Ottawa, OntariozWWV zHF Radio WWV Ft. Collins, COWWVHzHF Radio WWVH Kauai, HINISTzNIST telephone modemACTSzUSNO telephone modemzEuropean telephone modem)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.)ACSTAUTHAUTOBCSTCRYPDENYDROPRSTRINITMCSTNKEYRATERMOTc                     | t           S t          |           }|t          k    rBt          | d                   }|dz  }t          t
          d                    |t                     S t          j        S )z9
    Returns the right class for a given NTP packet.
    Nr   r[   )rZ   r[   )		NTPHeaderlen_NTP_PACKET_MIN_SIZEr    
NTPControl
NTPPrivategetr!   	raw_layer)payloadlength
first_bytemodes       r0   _ntp_dispatcherr}      sd     W)))WQZJ>D!j1155dIFFF>r2   c                   6    e Zd ZdZedd            Zd Zd ZdS )NTPz[
    Base class that allows easier instantiation of a NTP packet from binary
    data.
    Nc                      t          |          S )z=
        Returns the right class for the given data.
        )r}   )cls_pktargskargss       r0   dispatch_hookzNTP.dispatch_hook   s     t$$$r2   c                     t          |          }|t          k     rDd                    |          dz   }|d                    t                    z  }t          |          |S )zN
        Check that the payload is long enough to build a NTP packet.
        z ({}z is < _NTP_PACKET_MIN_SIZE z({})).)rs   rt   format_NTPInvalidDataException)r-   srz   errs       r0   pre_dissectzNTP.pre_dissect   s\     Q(((--''*GGC8??#7888C*3///r2   c                 f    |                      d                    | j        j                            S )Nz!NTP v%ir,{0}.version%, %{0}.mode%)sprintfr   	__class__r3   )r-   s    r0   	mysummaryzNTP.mysummary   s.    ||/66t~7NOO
 
 	
r2   r+   )r3   r4   r5   r6   classmethodr   r   r   r7   r2   r0   r   r      s\         
 % % % [%	 	 	
 
 
 
 
r2   r   c                       e Zd ZdZd ZdS )_NTPAuthenticatorPaddingFieldz_
    StrField handling the padding that may be found before the
    "authenticator" field.
    c                     d }|}t          |          }|t          k    r|t          z
  }|d |         }||d          }||fS r+   )rs   _NTP_AUTH_MD5_TAIL_SIZE)r-   r.   r   retremainrz   starts          r0   getfieldz&_NTPAuthenticatorPaddingField.getfield   sR    Q+++44EFUF)CuvvYFs{r2   N)r3   r4   r5   r6   r   r7   r2   r0   r   r      s-         
	 	 	 	 	r2   r   c                   h    e Zd ZdZdZ edd           edd           eddd 	          gZd
 Z	dS )NTPAuthenticatorz_
    Packet handling the "authenticator" part of a NTP packet, as
    defined in RFC 5905.
    Authenticatorpadding key_idr   dgstc                     dS Nr#   r7   r/   s    r0   <lambda>zNTPAuthenticator.<lambda>  s    B r2   length_fromc                 
    d|fS Nr2   r7   r-   r   s     r0   extract_paddingz NTPAuthenticator.extract_padding      Avr2   N)
r3   r4   r5   r6   r>   r   r   r   fields_descr   r7   r2   r0   r   r      sq         
 D%%i441&",,???K    r2   r   c            	       v    e Zd ZdZdZ edd           edd           e edde          dd	
          gZ	dS )NTPExtensionz,
    Packet handling a NTPv4 extension.
    	extensiontyper   rs   valuer   rX       )alignpadwithN)
r3   r4   r5   r6   r>   r   r   r   r   r   r7   r2   r0   r   r     sg         L D
61
5!Wb&11GLLLKKKr2   r   c                       e Zd ZdZd Zd ZdS )NTPExtPacketListFieldzH
    PacketListField handling NTPv4 extensions (NTPExtension list).
    c                 x    d }t          |          dk    rt          |          }nt          j        |          }|S r   )rs   r   r!   rx   r-   r.   mr   s       r0   m2izNTPExtPacketListField.m2iD  s7    q66R<<q//CC.##C
r2   c                 (   g }|}t          |          }|t          k    r|t          z
  }|d |         }||d          }t          |          }|dk    rt          j        d|dd                   d         }	t	          |	|          }	|	dk     r|}	|d |	         }
||	d          }|                     ||
          }|                    |           t          |          }|dk    |dk    r)|                    |                     ||                     ||fS )Nr#   !HrR   rX   r   rQ   )rs   r   structunpackminr   append)r-   r.   r   lstr   rz   end
extensionsextensions_lenext_lencurrentcurrent_packets               r0   r   zNTPExtPacketListField.getfieldL  s)   Q+++22C4C4JsttWF __N B&& -j1o>>qAg~66Q;;,G$XgX.'1
!%#w!7!7

>***!$Z !B&& !!

488C44555s{r2   Nr3   r4   r5   r6   r   r   r7   r2   r0   r   r   >  s<               r2   r   c                   Z    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)
r3   r4   r5   r6   r>   r   r   r   r   r   r7   r2   r0   r   r   g  sT           DlB77E++--/?@@KKKr2   r   c                      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           e
dd           edddd           edddd           e edd          d            e eddde          d            edd           edd           edd           edd          gZd  ZdS )!rr   z2
    Packet handling the RFC 5905 NTP packet.
    Tleapr   rR   versionrX   rS   r|   stratumr%   poll
   	precisiondelayr<   r#   size	frac_bits
dispersionidz	127.0.0.1c                     | j         dk    S NrQ   r   ps    r0   r   zNTPHeader.<lambda>  s    qy1} r2   ref_idr   )rz   enumc                     | j         dk     S )NrR   r   r   s    r0   r   zNTPHeader.<lambda>  s    ai!m r2   reforigNrecvsentc                     t          |          }|dz
  dv rt          S |t          k    rt          S t	          j        | |          S )zV
        Handles NTPv4 extensions and MAC part (when authentication is used.)
        rX   )r#   r$   r<   r;   )rs   r   r   r   r   guess_payload_class)r-   ry   plens      r0   r   zNTPHeader.guess_payload_class  sJ     7||!8'''##+++  )$888r2   )r3   r4   r5   r6   r>   match_subclassr   _leap_indicatorr   
_ntp_modesr   r   r	   r   r   _reference_identifiersr9   r   r   r7   r2   r0   rr   rr     sj        v DNVQ?33Aq!!VQ:..Aq!!$$Q''r:::abB???{335L5LMM  +	   $#	
 	
 	ua  vt$$vq!!vt$$-K29 9 9 9 9r2   rr   c                       e Zd ZdZd ZdS )r   z]
    Raised when it is not possible to instantiate a NTP packet with the
    given data.
    c                 B    t                               | d|z              d S )Nz,Data does not seem to be a valid NTP message)	Exceptionr=   )r-   detailss     r0   r=   z!_NTPInvalidDataException.__init__  s/    :WD	
 	
 	
 	
 	
r2   N)r3   r4   r5   r6   r=   r7   r2   r0   r   r     s-         

 
 
 
 
r2   r   CTL_OP_UNSPECCTL_OP_READSTATCTL_OP_READVARCTL_OP_WRITEVARCTL_OP_READCLOCKCTL_OP_WRITECLOCKCTL_OP_SETTRAPCTL_OP_ASYNCMSGCTL_OP_CONFIGURECTL_OP_SAVECONFIGCTL_OP_READ_MRUCTL_OP_READ_ORDLIST_ACTL_OP_REQ_NONCECTL_OP_UNSETTRAP)r   rQ   rR   rS   rX   rY   rZ   r[   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   rQ   rR   rS   rX   rY   rZ   r[   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   rQ   rR   rS   rX   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   rQ   rR   rS   rX   rY   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   rQ   rR   rS   rX   rY   rZ   zauthentication failurez invalid message length or formatzinvalid opcodezunknown association identifierzunknown variable namezinvalid variable valuezadministratively prohibitedc                   6    e Zd ZdZdZ edd          gZd ZdS )NTPStatusPacketz5
    Packet handling a non specific status word.
    statusr   c                 
    d|fS r   r7   r   s     r0   r   zNTPStatusPacket.extract_paddingm  r   r2   N)r3   r4   r5   r6   r>   r   r   r   r7   r2   r0   r  r  e  sH          D:h**+K    r2   r  c            	           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 ZdS )NTPSystemStatusPacketz3
    Packet handling the system status fields.
    zsystem statusleap_indicatorr   rR   clock_sourcerZ   system_event_counterrX   system_event_codec                 
    d|fS r   r7   r   s     r0   r   z%NTPSystemStatusPacket.extract_padding  r   r2   N)r3   r4   r5   r6   r>   r   _system_statuses_clock_sourcesr   _system_event_codesr   r   r7   r2   r0   r	  r	  q  s          D%q!-=>>^Q>::'A..(!Q0CDD	K    r2   r	  c                       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 Z
dS )NTPPeerStatusPacketz1
    Packet handling the peer status fields.
    zpeer statusr  r   rQ   auth_enabled	authenticreachabilityrT   peer_selrS   peer_event_counterrX   peer_event_codec                 
    d|fS r   r7   r   s     r0   r   z#NTPPeerStatusPacket.extract_padding  r   r2   N)r3   r4   r5   r6   r>   r   r   _peer_selection_peer_event_codesr   r   r7   r2   r0   r  r    s          Dq!$$A&&a##A&&Q""ZA77%q!,,&1.?@@	K    r2   r  c                   R    e Zd ZdZdZ eddde           eddd          gZd Z	dS )	NTPClockStatusPacketz2
    Packet handling the clock status fields.
    zclock statusclock_statusr   r%   codec                 
    d|fS r   r7   r   s     r0   r   z$NTPClockStatusPacket.extract_padding  r   r2   N)
r3   r4   r5   r6   r>   r   _clock_statusesr   r   r   r7   r2   r0   r  r    s_          D^Q?;;AK
    r2   r  c                   R    e Zd ZdZdZ eddde           eddd          gZd Z	dS )	NTPErrorStatusPacketz2
    Packet handling the error status fields.
    zerror status
error_coder   r%   rT   c                 
    d|fS r   r7   r   s     r0   r   z$NTPErrorStatusPacket.extract_padding  r   r2   N)
r3   r4   r5   r6   r>   r   _error_statusesr   r   r   r7   r2   r0   r$  r$    s_          D\1a99Q""K
    r2   r$  c                       e Zd ZdZd ZdS )NTPControlStatusFieldzH
    This field provides better readability for the "status" field.
    c                    d }t          j        d|dd                   d         }|j        dk    rt          |          }n|j        dk    r&|dk    rt          |          }nt          |          }n|j        dk    r&|dk    rt          |          }n`t          |          }nP|j        dk    rt          |          }n5|j        dk    s|j        dk    rt          |          }nt          |          }|S )Nr   rR   rX   r   rQ   rS   rY   )	r   r   r   r$  op_coder  r	  r  r  )r-   r.   r   r   association_ids        r0   r   zNTPControlStatusField.m2i  s   tQqsV44Q77a<<&q))CC [A"")!,,+A.. [A"")!,,+A.. [A!!$$CC [A!1!1&q))CC "!$$C
r2   N)r3   r4   r5   r6   r   r7   r2   r0   r)  r)    s-                  r2   r)  c                   X    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   peer_statusN)	r3   r4   r5   r6   r>   r   r   r  r   r7   r2   r0   r.  r.    sR         
  D
#Q''M#6#6#8#8:MNNKKKr2   r.  c                       e Zd ZdZd Zd ZdS )NTPControlDataPacketLenFieldzH
    PacketField handling the "data" field of NTP control messages.
    c                     d }|s|S |j         dk    r0|j        dk    rt          |          }n)t          j        |          }nt          j        |          }|S )NrQ   r   )r+  r,  r.  r!   rx   r   s       r0   r   z NTPControlDataPacketLenField.m2i  se     	J ;!!Q&&-a00nQ''.##C
r2   c                 H   |                      |          }d }|dk    r t          d|          }|dz  r|d|dz  z
  z  }	 |                     ||d |                   }n:# t          $ r- t          j        r t	          j        |d |                   }Y nw xY w||d          |fS )Nr   r   rX   )load)r   maxr   r   r!   debug_dissectorrx   )r-   r.   r   rz   is        r0   r   z%NTPControlDataPacketLenField.getfield  s    !!#&&A:: V__Fz +1vz>*	0aj))AA 	0 	0 	0# AgvgJ///AAA	0 z1}s   A 4BBNr   r7   r2   r0   r1  r1    s<           "    r2   r1  c                      e Zd ZdZdZdZ eddd           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e	           e
dd           e edde          d            e e
dd          d            e
dd           e
dd           e
dd           e edded                      edde          gZd ZdS ) ru   z:
    Packet handling NTP mode 6 / "Control" messages.
    zControl messageTzerosr   rR   r   rS   r|   rZ   responserQ   r   morer+  rY   sequencestatus_wordr   c                     | j         dk    S r   r:  r   s    r0   r   zNTPControl.<lambda><  s    !*/ r2   r  c                     | j         dk    S Nr   r?  r   s    r0   r   zNTPControl.<lambda>=  s    AJ!O r2   r,  offsetcountNdatac                     | j         S r+   )rC  r   s    r0   r   zNTPControl.<lambda>B  s     r2   r   authenticatorc                     | j         Hd}| j        rt          | j                  }|d d         t          j        d|          z   |dd          z   }||z   S )Nr   r   r      )rC  rD  rs   r   pack)r-   r   payrz   s       r0   
post_buildzNTPControl.post_buildF  sZ    :Fy (TY#2#T6222QrssV;A3wr2   )r3   r4   r5   r6   r>   r   r   r   r   	_op_codesr   r	   r)  r   r   r1  r   r   r   rK  r7   r2   r0   ru   ru   "  s         DN!QAq!!VQ:..Q""1AY1i00
:q!!..2v' '(A(A	C 	CHa002K2KLL
#Q''
8Q
7D!!++r6/@/@B B B 	C 	COR)9::#K(    r2   ru   	INFO_OKAYINFO_ERR_IMPLINFO_ERR_REQINFO_ERR_FMTINFO_ERR_NODATAINFO_ERR_AUTH)r   rQ   rR   rS   rX   r[   	IMPL_UNIVIMPL_XNTPD_OLDXNTPD)r   rR   rS   REQ_PEER_LISTrQ   REQ_PEER_LIST_SUMrR   REQ_PEER_INFOrS   REQ_PEER_STATSrX   REQ_SYS_INFOrY   REQ_SYS_STATSrZ   REQ_IO_STATSr[   REQ_MEM_STATSREQ_LOOP_INFOr   REQ_TIMER_STATSr   
REQ_CONFIGr   REQ_UNCONFIGr   REQ_SET_SYS_FLAGrH  REQ_CLR_SYS_FLAG   REQ_MONITOR   REQ_NOMONITORREQ_GET_RESTRICT   REQ_RESADDFLAGS   REQ_RESSUBFLAGS   REQ_UNRESTRICTREQ_MON_GETLIST   REQ_RESET_STATS   REQ_RESET_PEER   REQ_REREAD_KEYS   REQ_DO_DIRTY_HACK   REQ_DONT_DIRTY_HACK   REQ_TRUSTKEY   REQ_UNTRUSTKEYREQ_AUTHINFO   	REQ_TRAPS   REQ_ADD_TRAPr   REQ_CLR_TRAPr<   REQ_REQUEST_KEY!   REQ_CONTROL_KEYREQ_GET_CTLSTATSREQ_GET_LEAPINFOREQ_GET_CLOCKINFOREQ_SET_CLKFUDGEREQ_GET_KERNELREQ_GET_CLKBUGINFOREQ_SET_PRECISIONREQ_MON_GETLIST_1REQ_HOSTNAME_ASSOCIDREQ_IF_STATSREQ_IF_RELOAD)"   #   $   %   &   '   )   *   +   ,   -   )	INFO_FLAG_CONFIGINFO_FLAG_SYSPEERINFO_FLAG_BURSTINFO_FLAG_REFCLOCKINFO_FLAG_PREFERINFO_FLAG_AUTHENABLEINFO_FLAG_SEL_CANDIDATEINFO_FLAG_SHORTLISTINFO_FLAG_IBURST)INFO_FLAG_BCLIENTINFO_FLAG_AUTHENTICATEINFO_FLAG_NTPINFO_FLAG_KERNELINFO_FLAG_CALINFO_FLAG_PPS_SYNCINFO_FLAG_MONITORINFO_FLAG_FILEGENc            
           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.
    info_peer_listaddr0.0.0.0portr   hmodeflagsr%   v6_flagunused1addr6::N)r3   r4   r5   r6   r>   r   r   r   r   r   _peer_flagsr   r   r   r7   r2   r0   r  r    s          D	""
61gq*--
7Aq+..AA$KKKr2   r  c                      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           edd           e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.
    info_peer_summarydstaddrr  srcaddrsrcportr   r   hpollppollreachr  r%   r  r   r<   r#   r   rB  r   r  r  dstaddr6r  srcaddr6N)r3   r4   r5   r6   r>   r   r   r   r   r  r   r   r9   r   r   r   r7   r2   r0   r  r    s(         D	9%%	9%%
9a  	)Q	'1	'1	'1
7Aq+..	':&&r:::x##abB???AAT""T""!KKKr2   r  c                      e Zd ZdZdZg  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            ed!ddd            ed"d           ed#d           ed$d           ed%d           ed&d'  ede          D              ed(ddd           d) *           ed+d,  ede          D              ed(d          d- *           ed.d/  ede          D              e	d(d          d0 *           ed1ddd            ed2ddd            ed3d           ed4ddd            ed5d           ed6d           ed7d           ed8d           ed9d           ed:d           ed;d           ed<ddd            ed=d           ed>d           ed?d@           edAd@          ZdBS )CNTPInfoPeerz%
    Peer information structure.
    	info_peerr  r  r  r  r   r  r%   r   r  pmoder   r  r  r   r   unused8r  unreachflashttlflash2associdkeyidpkeyidrefidtimer	rootdelayr<   r#   r   rootdispersionreftimeorgrecxmt	filtdelayc                     g | ]}d S g        r7   .0r7  s     r0   
<listcomp>zNTPInfoPeer.<listcomp>       ///QS///r2   r   c                     t           S r+   
_NTP_SHIFTr   s    r0   r   zNTPInfoPeer.<lambda>       r2   )
count_from
filtoffsetc                     g | ]}d S r  r7   r  s     r0   r  zNTPInfoPeer.<listcomp>  r  r2   c                     t           S r+   r  r   s    r0   r   zNTPInfoPeer.<lambda>  r  r2   orderc                     g | ]}d S )r   r7   r  s     r0   r  zNTPInfoPeer.<listcomp>  s    ---1Q---r2   c                     t           S r+   r  r   s    r0   r   zNTPInfoPeer.<lambda>  r  r2   r   r   rB  
selectdispr  unused2unused3unused4unused5unused6unused7	estbdelayr  unused9r  r  r  N)r3   r4   r5   r6   r>   r   r   r   r  r   r   r   r   r   r)   r   r   r   r9   r
   ranger  r   r   r7   r2   r0   r  r    s}         D@	9%%@	9%%@ 	
9a  @ 	
7Aq+..	@
 		&!@ 	gq*--@ 		'1@ 		)Q@ 		'1@ 		'1@ 	Q''@ 		)Q@ 		)Q@ 		'1@ 		)Q@  	
7A!@" 		%#@$ 	h""%@& 	
9a  '@( 	
7A)@* 	1+@, 	-@. 	!/@0 	QR2>>>1@2 	(!"CCC3@4 	y!$$5@6 	ua  7@8 	ua  9@: 	ua  ;@< 	//%%:..///OBb999++		
 	
 	
=@H 	//%%:..///N2q!!++		
 	
 	
I@T 	--a,,---Ib!++		
 	
 	
U@` 	r:::a@b 	abB???c@d 	x##e@f 	abB???g@h 	Ai@j 	Ak@l 	Am@n 	Ao@p 	Aq@r 	As@t 	Au@v 	QR2>>>w@x 	Ay@z 	A{@| 	T""}@~ 	T""@KKKr2   r  c                      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.
    info_peer_statsr  r  r  r  r   r  r#   	timeresettimereceived
timetosendtimereachabler   r  	processedr  badauthbogusorgoldpktr  r  seldisp	selbrokenr  	candidater  r  r  r  r  r  r  r  N)r3   r4   r5   r6   r>   r   r   r   r  r   r   r   r   r7   r2   r0   r  r  #  s         D	9%%	9%%
9a  
7Ar;//a  ##q!!!$$Aa  AAQ1AAAa  A	+q!!	)Q	)Q	)QAAT""T""9KKKr2   r  c                   r    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.
    	info_looplast_offsetr   
drift_comp
compliancewatchdog_timerN)r3   r4   r5   r6   r>   r9   r   r   r7   r2   r0   r  r  I  sc          D}a((|Q''q!!!1%%	KKKr2   r  c                   
   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           e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           edddd           e	dd           e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.
    info_syspeerr  	peer_moder   r   r   r   r  r<   r#   r   r  r  r  r   r  r%   r  r  r  bdelay	frequency	authdelay	stabilityr  r  peer6r  N)r3   r4   r5   r6   r>   r   r   r   r   r9   r   r   _sys_info_flagsr   r   r7   r2   r0   r  r  W  s        
 D	""	+q!!	&!	)QQ''QR2>>>(!"CCCy!$$
7Aq/22	)Q	)Q	)Q!";;;QR2>>>{A&&QR2>>>AA$+KKKr2   r  c                      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.
    info_sys_statstimeupr   r  deniedoldversionpktnewversionpktunknownversion	badlengthr  r  receivedlimitrejectedNr3   r4   r5   r6   r>   r   r   r7   r2   r0   r  r  w  s          D1a  1!$$!$$!1%%a  a  AQ!$$KKKr2   r  c                       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e	          D              e
dd          d e	          gZdS )NTPInfoMemStatsz!
    Peer memory statistics.
    info_mem_statsr  r   totalpeermemfreepeermemfindpeer_callsallocationsdemobilizations	hashcountc                     g | ]}d S r  r7   r  s     r0   r  zNTPInfoMemStats.<listcomp>  s    333QS333r2   r   c                     t           S r+   )_NTP_HASH_SIZEr   s    r0   r   zNTPInfoMemStats.<lambda>  s     r2   )r  	max_countN)r3   r4   r5   r6   r>   r   r   r
   r  r-  r   r   r7   r2   r0   r#  r#    s          Da  
>1%%
=!$$!1%%"""A&&33%%>22333Ib!//$	
 	
 	
KKKr2   r#  c                   "   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.
    info_io_statsr  r   totalrecvbufsfreerecvbufsfullrecvbufslowwaterdroppedignoredr  r   notsent
interruptsint_receivedNr3   r4   r5   r6   r>   r   r   r   r7   r2   r0   r0  r0    s          Da  
?A&&
>1%%
>1%%
:q!!AAQAq!!##KKKr2   r0  c                   r    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.
    info_timer_statsr  r   alarms	overflowsxmtcallsNr!  r7   r2   r0   r=  r=    sb          Da  1a  Q	KKKr2   r=  )CONF_FLAG_AUTHENABLECONF_FLAG_PREFERCONF_FLAG_BURSTCONF_FLAG_IBURSTCONF_FLAG_NOSELECTCONF_FLAG_SKEYc                   @   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           e
dd           e
dd           edd          gZdS )NTPConfPeerz?
    Structure for passing peer configuration information.
    	conf_peerpeeraddrr  r  r   r   minpollmaxpollr  r%   r  r  r  keystrr   r'   rz   r  r  	peeraddr6r  N)r3   r4   r5   r6   r>   r   r   r   _conf_peer_flagsr   r   r   r   r   r7   r2   r0   rI  rI    s          D
I&&	'1	)Q	)Q	)Q
7Aq"233	%
9a  !2c222AAd##KKKr2   rI  c                   \    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.
    conf_unpeerrK  r  r  r   rP  r  N)	r3   r4   r5   r6   r>   r   r   r   r   r7   r2   r0   rS  rS    sS          D
I&&Ad##KKKr2   rS  )
RES_IGNORERES_DONTSERVERES_DONTTRUSTRES_VERSION
RES_NOPEERRES_LIMITEDRES_NOQUERYRES_NOMODIFY
RES_NOTRAP
RES_LPTRAPRES_KOD
RES_MSSNTP	RES_FLAKERES_NOMRULISTc            
           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.
    conf_restrictr  r  maskr  r   r#   m_flagsr  r  r  mask6N)r3   r4   r5   r6   r>   r   r   _restrict_flagsr   r   r   r   r7   r2   r0   rd  rd    s          D	""	""
7Ar?33
9a  A$$KKKr2   rd  c                   z   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
    info_kernelrB  r   freqmaxerroresterrorr  shiftconstantr   	toleranceppsfreqjitterstabiljitcntcalcnterrcntstbcntNr;  r7   r2   r0   rk  rk    s         D1QQ
8Q
7AQa  a  A111111!KKKr2   rk  c                      e Zd ZdZdZ e edd          dd           e edd          dd           e ed	d          dd           ed
d           e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   ifnamer   r<   rO  r  last_ttl	num_mcastr  r   r8  uptimescopeidifindexifnumpeercntfamilyignore_packetsaction_filler0N)r3   r4   r5   r6   r>   r   r   r   r   r   r   r   r7   r2   r0   r{  r{  2  s         D9--r7CCCI..GDDD9--r7CCCA2b111!Qa  QA1AA!A
8Q	"A&&	(AQ)KKKr2   r{  c                      e Zd ZdZdZ edd           edd           edd           edd           e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 )NTPInfoIfStatsIPv6r|  r}  r~  r  r  r  r  r   r  r   r<   rO  r  r  r  r  r   r8  r  r  r  r  r  r  r  r  r  N)r3   r4   r5   r6   r>   r   r   r   r   r   r   r7   r2   r0   r  r  P  sY         D4  D!!4  A2b111!Qa  QA1AA!A
8Q	"A&&	(AQ)KKKr2   r  c                   N   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.
    InfoMonitor1lasttimer   	firsttimelastdroprC  r  r  daddrr  r  r|   r   r  r  r  r  daddr6N)r3   r4   r5   r6   r>   r   r   r   r   r   r   r7   r2   r0   r  r  n  s          DQa  Q!	""##!
61	&!	)QAA$4  KKKr2   r  c                       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.
    	info_authr  r   numkeysnumfreekeys
keylookupskeynotfoundencryptionsdecryptionsexpiredkeyuncachedNr!  r7   r2   r0   r  r    s          Da  A""q!!""""""A""
KKKr2   r  c            
           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
    	conf_traplocal_addressr  trap_address	trap_portr   unusedr  local_address6r  trap_address6N)
r3   r4   r5   r6   r>   r   r   r   r   r   r7   r2   r0   r  r    s          D++	**
;""
8QA!4(($''KKKr2   r  c                   d   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.
    info_controlctltimeresetr   	numctlreqnumctlbadpktsnumctlresponsesnumctlfragsnumctlerrorsnumctltooshortnumctlinputrespnumctlinputfragnumctlinputerrnumctlbadoffsetnumctlbadversionnumctldatatooshortnumctlbadopnumasyncmsgsNr!  r7   r2   r0   r  r    s         D##a  !$$"A&&""##!1%%"A&&"A&&!1%%"A&&#Q''%q))""##KKKr2   r  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  r  r  c                       e Zd ZdZd Zd ZdS )NTPPrivateRespPacketListFieldz5
    PacketListField handling the response data.
    c                 "   d }|j         dk    s|j         dk    rDt          j        d|dd                   d         }|rt          |          nt	          |          }n2t                              |j         t          j                  |          }|S )Nr  r  z!I0   4   r   )	request_coder   r   r  r{  _private_data_objectsrw   r!   rx   )r-   r.   r   r   is_v6s        r0   r   z!NTPPrivateRespPacketListField.m2i  s     r!!S%5%;%;M$"R%11!4E+0K$Q'''6H6K6KCC'++C,<dnMMaPPC
r2   c                 D   g }|}|j         }|dk    rd}t          |          |j         k    rr||j        k     rg|d |         }||d          }|                     ||          }|                    |           |dz  }t          |          |j         k    r||j        k     g||fS Nr   rQ   )data_item_sizers   nb_itemsr   r   )	r-   r.   r   r   r   rz   item_counterr   r   s	            r0   r   z&NTPPrivateRespPacketListField.getfield  s    #A::Lf++!333s|8S8S &/!%#w!7!7

>***! f++!333s|8S8S s{r2   Nr   r7   r2   r0   r  r    s<         
 
 
    r2   r  c                   0    e Zd ZdZdZ edd          gZdS )NTPPrivateReqPacketz'
    Packet handling request data.
    zrequest datareq_datar   N)r3   r4   r5   r6   r>   r   r   r7   r2   r0   r  r    s3          D8J++,KKKr2   r  c                       e Zd ZdZd Zd ZdS )NTPPrivateReqPacketListFieldz+
    Handles specific request packets.
    c                    d }|j         dk    s|j         dk    rt          |          }n|j         dk    rt          |          }n|j         dk    rt          |          }n|j         dk    rt	          |          }nk|j         dk    rt	          |          }nP|j         dk    rt          |          }n5|j         dk    s|j         d	k    rt          |          }nt          |          }|S )
NrR   rS   r   r   ri  rk  rr  r  r   )r  r  rI  rS  rd  r  r  )r-   r.   r   r   s       r0   r   z NTPPrivateReqPacketListField.m2iI  s    q  C$4$9$9 "!$$CC##a..CC##""CC##!!$$CC##!!$$CC##""CC##s'72'='=a..CC &a((C
r2   c                    g }|}|j         }|dk    rd}t          |          |j         |j        z  k    rz||j        k     ro|d |         }||d          }|                     ||          }|                    |           |dz  }t          |          |j         |j        z  k    r||j        k     o|j        rRt          |          t          z
  }	t          j        |d |	                   }|                    |           ||	d          }||fS r  )	r  rs   r  r   r   auth_NTP_PRIVATE_REQ_PKT_TAIL_LENr!   rx   )
r-   r.   r   r   r   rz   r  r   r   padding_ends
             r0   r   z%NTPPrivateReqPacketListField.getfieldn  s   #A::Lf++!3cl!BBB|VYVbGbGb &/!%#w!7!7

>***! f++!3cl!BBB|VYVbGbGb 8 	*f++(EEK!^F<K<,@AANJJ~&&&KLL)Fs{r2   Nr   r7   r2   r0   r  r  B  s=         # # #J    r2   r  c                   b    e Zd ZdZdZ edd           edd           e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.
    req_pkt_tailtstampr   r   r   r   c                     t           S r+   )_NTP_AUTH_MD5_DGST_SIZEr   s    r0   r   zNTPPrivatePktTail.<lambda>  s    .E r2   r   N)	r3   r4   r5   r6   r>   r9   r   r   r   r7   r2   r0   r  r    sg          Dx##1B$E$E	G 	G 	GKKKr2   r  c                      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           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            e edg ed d           d            e ed d!e          d"           gZd#S )$rv   z8
    Packet handling the private (mode 7) messages.
    zPrivate (mode 7)Tr:  r   rQ   r;  r   rR   rS   r|   r[   r  seqimplementationr  r   rX   r  r   mbzr  r  c                     | j         S r+   r  r   s    r0   r   zNTPPrivate.<lambda>  	    a&6 r2   c                     | j         S r+   r  r   s    r0   r   zNTPPrivate.<lambda>      QZ r2   )r   r  c                     | j         dk    S rA  r?  r   s    r0   r   zNTPPrivate.<lambda>      ajAo r2   rD  c                     | j         S r+   r  r   s    r0   r   zNTPPrivate.<lambda>%  r  r2   c                     | j         S r+   r  r   s    r0   r   zNTPPrivate.<lambda>&  r  r2   c                     | j         dk    S r   r?  r   s    r0   r   zNTPPrivate.<lambda>(  r  r2   rF  r   c                 .    | j         dk    o
| j        dk    S r  )r:  r  r   s    r0   r   zNTPPrivate.<lambda>,  s    1:?#Bqv{ r2   N)r3   r4   r5   r6   r>   r   r   r   r   r   _implementations_request_codes_ntpd_private_errorsr	   r  r   r  r   r  r   r7   r2   r0   rv   rv     s        ` DNQ""AAq!!VQ:..A1&+;<<na88UAq"677Q##1!1b))((66//   &%		
 		
 	))66//   &%		
 		
 	_b:KLLBB	D 	DG%KKKr2   rv   sport{   dport)r  r  )xr6   r   rC   rM   scapy.packetr   r   scapy.fieldsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scapy.layers.inetr   scapy.utilsr   scapy.compatr    scapy.configr!   _NTP_AUTH_MD5_MIN_SIZE_NTP_EXT_MIN_SIZE_NTP_HDR_WITH_EXT_MIN_SIZEr   r  _NTP_PRIVATE_PACKET_MIN_SIZErt   r  rA   r  r-  r)   r9   r   r   r   _kiss_codesr}   r   r   r   r   r   r   rr   r   r   rL  r  r  r  _peer_statusesr  r  r"  r'  r  r	  r  r  r$  r)  r.  r1  ru   _information_error_codesr  r  r  r  r  r  r  r  r  r  r  r#  r0  r=  rQ  rI  rS  ri  rd  rk  r{  r  r  r  r  r  r  r  r  r  r  r  rv   r7   r2   r0   <module>r     s   
    , , , , , , , ,                                                     6 " ! ! ! ! !                     36GG      4  "   
& & & & &L & & &3 3 3 3 3_ 3 3 3L ..'	  !	 	

8
$ ( &	
 / 2 5 . - @ / * * * %  "!" "#$ #&'   2 ;+&<D-*0JII $  $
 
 
 
 
& 
 
 
>    H   $    v   ", , , , ,6 , , ,^& & & & &O & & &R    F   0c9 c9 c9 c9 c9 c9 c9 c9L

 

 

 

 

y 

 

 

&  	( ##1	    !*  !EVA$	 	    " >:	 	 $   )#!!  )'$	 		 	 	 	 	f 	 	 	    F   $    &   *    6       6   . . . . .K . . .b
 
 
 
 
f 
 
 
+ + + + +> + + +\* * * * * * * *d      ... . 	.
 ~. . ~. . . . . . . . .  !." #. .$ %.& '.( ).* +., -.. /.0 1.2 3.4 5.6 7.8 9.: ;.< =.> ?.@ A.B C.D E. .F 	[. . .d
 
 
	 	 	    f   "       2F F F F F& F F FR# # # # #v # # #L    &          @    f   *    f   .    V   ,              &   .
 
 
 
 
F 
 
 
  $    f   "    F   4       <       <    f   0    &   &    &   "    V   6 +#EE8	 	  { 	
 z  ~  {        !" # *    O   D- - - - -& - - -... . 	.
 ~. . ~. . . . . . . . .  !." #. .$ %.& '.( ).* +., -.. /.0 1.2 3.4 5.6 7.8 9.: ;.< =.> ?.@ A.B C.D E. .F 	[. . .b@ @ @ @ @? @ @ @F        X X X X X X X X~ Cwn % % % Cwn % % % Cc22 3 3 3 3 3r2   