1
2
3 """IEEE 802.11."""
4
5 import dpkt
6
7
8 MANAGEMENT = 0
9 CONTROL = 1
10 DATA = 2
11
12
13 M_ASSOC_REQ = 0
14 M_ASSOC_RESP = 1
15 M_REASSOC_REQ = 2
16 M_REASSOC_RESP = 3
17 M_PROBE_REQ = 4
18 M_PROBE_RESP = 5
19 C_PS_POLL = 10
20 C_RTS = 11
21 C_CTS = 12
22 C_ACK = 13
23 C_CF_END = 14
24 C_CF_END_ACK = 15
25 D_DATA = 0
26 D_DATA_CF_ACK = 1
27 D_DATA_CF_POLL = 2
28 D_DATA_CF_ACK_POLL = 3
29 D_NULL = 4
30 D_CF_ACK = 5
31 D_CF_POLL = 6
32 D_CF_ACK_POLL = 7
33
34
35 _VERSION_MASK = 0x0300
36 _TYPE_MASK = 0x0c00
37 _SUBTYPE_MASK = 0xf000
38 _TO_DS_MASK = 0x0001
39 _FROM_DS_MASK = 0x0002
40 _MORE_FRAG_MASK = 0x0004
41 _RETRY_MASK = 0x0008
42 _PWR_MGT_MASK = 0x0010
43 _MORE_DATA_MASK = 0x0020
44 _WEP_MASK = 0x0040
45 _ORDER_MASK = 0x0080
46 _VERSION_SHIFT = 8
47 _TYPE_SHIFT = 10
48 _SUBTYPE_SHIFT = 12
49 _TO_DS_SHIFT = 0
50 _FROM_DS_SHIFT = 1
51 _MORE_FRAG_SHIFT = 2
52 _RETRY_SHIFT = 3
53 _PWR_MGT_SHIFT = 4
54 _MORE_DATA_SHIFT = 5
55 _WEP_SHIFT = 6
56 _ORDER_SHIFT = 7
57
59 __hdr__ = (
60 ('framectl', 'H', 0),
61 ('duration', 'H', 0)
62 )
63
86
87 version = property(_get_version, _set_version)
88 type = property(_get_type, _set_type)
89 subtype = property(_get_subtype, _set_subtype)
90 to_ds = property(_get_to_ds, _set_to_ds)
91 from_ds = property(_get_from_ds, _set_from_ds)
92 more_frag = property(_get_more_frag, _set_more_frag)
93 retry = property(_get_retry, _set_retry)
94 pwr_mgt = property(_get_pwr_mgt, _set_pwr_mgt)
95 more_data = property(_get_more_data, _set_more_data)
96 wep = property(_get_wep, _set_wep)
97 order = property(_get_order, _set_order)
98
110
111 - class RTS(dpkt.Packet):
112 __hdr__ = (
113 ('dst', '6s', '\x00' * 6),
114 ('src', '6s', '\x00' * 6)
115 )
116
117 - class CTS(dpkt.Packet):
118 __hdr__ = (
119 ('dst', '6s', '\x00' * 6),
120 )
121
122 - class ACK(dpkt.Packet):
123 __hdr__ = (
124 ('dst', '6s', '\x00' * 6),
125 )
126
127 if __name__ == '__main__':
128 import unittest
129
132 s = '\xd4\x00\x00\x00\x00\x12\xf0\xb6\x1c\xa4'
133 ieee = IEEE80211(s)
134 self.failUnless(str(ieee) == s)
135 self.failUnless(ieee.version == 0)
136 self.failUnless(ieee.type == CONTROL)
137 self.failUnless(ieee.subtype == C_ACK)
138 self.failUnless(ieee.to_ds == 0)
139 self.failUnless(ieee.from_ds == 0)
140 self.failUnless(ieee.pwr_mgt == 0)
141 self.failUnless(ieee.more_data == 0)
142 self.failUnless(ieee.wep == 0)
143 self.failUnless(ieee.order == 0)
144 self.failUnless(ieee.ack.dst == '\x00\x12\xf0\xb6\x1c\xa4')
145
146 unittest.main()
147