Source code for dpkt.ntp

# $Id: ntp.py 48 2008-05-27 17:31:15Z yardley $
# -*- coding: utf-8 -*-
"""Network Time Protocol."""
from __future__ import print_function

from . import dpkt
from .decorators import deprecated

# NTP v4

# Leap Indicator (LI) Codes
NO_WARNING = 0
LAST_MINUTE_61_SECONDS = 1
LAST_MINUTE_59_SECONDS = 2
ALARM_CONDITION = 3

# Mode Codes
RESERVED = 0
SYMMETRIC_ACTIVE = 1
SYMMETRIC_PASSIVE = 2
CLIENT = 3
SERVER = 4
BROADCAST = 5
CONTROL_MESSAGE = 6
PRIVATE = 7


[docs]class NTP(dpkt.Packet): """Network Time Protocol. TODO: Longer class information.... Attributes: __hdr__: Header fields of NTP. TODO. """ __hdr__ = ( ('flags', 'B', 0), ('stratum', 'B', 0), ('interval', 'B', 0), ('precision', 'B', 0), ('delay', 'I', 0), ('dispersion', 'I', 0), ('id', '4s', 0), ('update_time', '8s', 0), ('originate_time', '8s', 0), ('receive_time', '8s', 0), ('transmit_time', '8s', 0) ) @property def v(self): return (self.flags >> 3) & 0x7 @v.setter def v(self, v): self.flags = (self.flags & ~0x38) | ((v & 0x7) << 3) @property def li(self): return (self.flags >> 6) & 0x3 @li.setter def li(self, li): self.flags = (self.flags & ~0xc0) | ((li & 0x3) << 6) @property def mode(self): return self.flags & 0x7 @mode.setter def mode(self, mode): self.flags = (self.flags & ~0x7) | (mode & 0x7)
__s = b'\x24\x02\x04\xef\x00\x00\x00\x84\x00\x00\x33\x27\xc1\x02\x04\x02\xc8\x90\xec\x11\x22\xae\x07\xe5\xc8\x90\xf9\xd9\xc0\x7e\x8c\xcd\xc8\x90\xf9\xd9\xda\xc5\xb0\x78\xc8\x90\xf9\xd9\xda\xc6\x8a\x93'
[docs]def test_ntp_pack(): n = NTP(__s) assert (__s == bytes(n))
[docs]def test_ntp_unpack(): n = NTP(__s) assert (n.li == NO_WARNING) assert (n.v == 4) assert (n.mode == SERVER) assert (n.stratum == 2) assert (n.id == b'\xc1\x02\x04\x02') # test get/set functions n.li = ALARM_CONDITION n.v = 3 n.mode = CLIENT assert (n.li == ALARM_CONDITION) assert (n.v == 3) assert (n.mode == CLIENT)
if __name__ == '__main__': test_ntp_pack() test_ntp_unpack() print('Tests Successful...')