Package dpkt :: Module ntp
[hide private]
[frames] | no frames]

Source Code for Module dpkt.ntp

 1  # $Id: ntp.py 382 2006-07-31 04:07:52Z jonojono $ 
 2   
 3  """Network Time Protocol.""" 
 4   
 5  import time 
 6  import dpkt 
 7   
 8  # NTP v4 
 9   
10  # Leap Indicator (LI) Codes 
11  NO_WARNING              = 0 
12  LAST_MINUTE_61_SECONDS  = 1 
13  LAST_MINUTE_59_SECONDS  = 2 
14  ALARM_CONDITION         = 3 
15   
16  # Mode Codes 
17  RESERVED                = 0 
18  SYMMETRIC_ACTIVE        = 1 
19  SYMMETRIC_PASSIVE       = 2 
20  CLIENT                  = 3 
21  SERVER                  = 4 
22  BROADCAST               = 5 
23  CONTROL_MESSAGE         = 6 
24  PRIVATE                 = 7 
25   
26 -class NTP(dpkt.Packet):
27 __hdr__ = ( 28 ('flags', 'B', 0), 29 ('stratum', 'B', 0), 30 ('interval', 'B', 0), 31 ('precision', 'B', 0), 32 ('delay', 'I', 0), 33 ('dispersion', 'I', 0), 34 ('id', '4s', 0), 35 ('update_time', '8s', 0), 36 ('originate_time', '8s', 0), 37 ('receive_time', '8s', 0), 38 ('transmit_time', '8s', 0) 39 ) 40
41 - def _get_v(self):
42 return (self.flags >> 3) & 0x7
43 - def _set_v(self, v):
44 self.flags = (self.flags & ~0x38) | ((v & 0x7) << 3)
45 v = property(_get_v, _set_v) 46
47 - def _get_li(self):
48 return (self.flags >> 6) & 0x3
49 - def _set_li(self, li):
50 self.flags = (self.flags & ~0xc0) | ((li & 0x3) << 6)
51 li = property(_get_li, _set_li) 52
53 - def _get_mode(self):
54 return (self.flags & 0x7)
55 - def _set_mode(self, mode):
56 self.flags = (self.flags & ~0x7) | (mode & 0x7)
57 mode = property(_get_mode, _set_mode)
58 59 if __name__ == '__main__': 60 import unittest 61
62 - class NTPTestCase(unittest.TestCase):
63 - def testPack(self):
64 n = NTP(self.s) 65 self.failUnless(self.s == str(n))
66
67 - def testUnpack(self):
68 n = NTP(self.s) 69 self.failUnless(n.li == NO_WARNING) 70 self.failUnless(n.v == 4) 71 self.failUnless(n.mode == SERVER) 72 self.failUnless(n.stratum == 2) 73 self.failUnless(n.id == '\xc1\x02\x04\x02') 74 75 # test get/set functions 76 n.li = ALARM_CONDITION 77 n.v = 3 78 n.mode = CLIENT 79 self.failUnless(n.li == ALARM_CONDITION) 80 self.failUnless(n.v == 3) 81 self.failUnless(n.mode == CLIENT)
82 83 s = '\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'
84 unittest.main() 85