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

Source Code for Module dpkt.ntp

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