1 '''Radiotap'''
2
3 import dpkt
4
5
6
7
8
9 _TSFT_MASK = 0x1000000
10 _FLAGS_MASK = 0x2000000
11 _RATE_MASK = 0x4000000
12 _CHANNEL_MASK = 0x8000000
13 _FHSS_MASK = 0x10000000
14 _ANT_SIG_MASK = 0x20000000
15 _ANT_NOISE_MASK = 0x40000000
16 _LOCK_QUAL_MASK = 0x80000000
17 _TX_ATTN_MASK = 0x10000
18 _DB_TX_ATTN_MASK = 0x20000
19 _DBM_TX_POWER_MASK = 0x40000
20 _ANTENNA_MASK = 0x80000
21 _DB_ANT_SIG_MASK = 0x100000
22 _DB_ANT_NOISE_MASK = 0x200000
23 _RX_FLAGS_MASK = 0x400000
24 _CHANNELPLUS_MASK = 0x200
25 _EXT_MASK = 0x1
26
27 _TSFT_SHIFT = 24
28 _FLAGS_SHIFT = 25
29 _RATE_SHIFT = 26
30 _CHANNEL_SHIFT = 27
31 _FHSS_SHIFT = 28
32 _ANT_SIG_SHIFT = 29
33 _ANT_NOISE_SHIFT = 30
34 _LOCK_QUAL_SHIFT = 31
35 _TX_ATTN_SHIFT = 16
36 _DB_TX_ATTN_SHIFT = 17
37 _DBM_TX_POWER_SHIFT = 18
38 _ANTENNA_SHIFT = 19
39 _DB_ANT_SIG_SHIFT = 20
40 _DB_ANT_NOISE_SHIFT = 21
41 _RX_FLAGS_SHIFT = 22
42 _CHANNELPLUS_SHIFT = 10
43 _EXT_SHIFT = 0
44
45
46 _FLAGS_SIZE = 2
47 _CFP_FLAG_SHIFT = 0
48 _PREAMBLE_SHIFT = 1
49 _WEP_SHIFT = 2
50 _FRAG_SHIFT = 3
51 _FCS_SHIFT = 4
52 _DATA_PAD_SHIFT = 5
53 _BAD_FCS_SHIFT = 6
54 _SHORT_GI_SHIFT = 7
55
56
57 _CHAN_TYPE_SIZE = 4
58 _CHANNEL_TYPE_SHIFT = 4
59 _CCK_SHIFT = 5
60 _OFDM_SHIFT = 6
61 _TWO_GHZ_SHIFT = 7
62 _FIVE_GHZ_SHIFT = 8
63 _PASSIVE_SHIFT = 9
64 _DYN_CCK_OFDM_SHIFT = 10
65 _GFSK_SHIFT = 11
66 _GSM_SHIFT = 12
67 _STATIC_TURBO_SHIFT = 13
68 _HALF_RATE_SHIFT = 14
69 _QUARTER_RATE_SHIFT = 15
70
72 __hdr__ = (
73 ('version', 'B', 0),
74 ('pad', 'B', 0),
75 ('length', 'H', 0),
76 ('present_flags', 'I', 0)
77 )
78
113
114 tsft_present = property(_get_tsft_present, _set_tsft_present)
115 flags_present = property(_get_flags_present, _set_flags_present)
116 rate_present = property(_get_rate_present, _set_rate_present)
117 channel_present = property(_get_channel_present, _set_channel_present)
118 fhss_present = property(_get_fhss_present, _set_fhss_present)
119 ant_sig_present = property(_get_ant_sig_present, _set_ant_sig_present)
120 ant_noise_present = property(_get_ant_noise_present, _set_ant_noise_present)
121 lock_qual_present = property(_get_lock_qual_present, _set_lock_qual_present)
122 tx_attn_present = property(_get_tx_attn_present, _set_tx_attn_present)
123 db_tx_attn_present = property(_get_db_tx_attn_present, _set_db_tx_attn_present)
124 dbm_tx_power_present = property(_get_dbm_power_present, _set_dbm_power_present)
125 ant_present = property(_get_ant_present, _set_ant_present)
126 db_ant_sig_present = property(_get_db_ant_sig_present, _set_db_ant_sig_present)
127 db_ant_noise_present = property(_get_db_ant_noise_present, _set_db_ant_noise_present)
128 rx_flags_present = property(_get_rx_flags_present, _set_rx_flags_present)
129 chanplus_present = property(_get_chanplus_present, _set_chanplus_present)
130 ext_present = property(_get_ext_present, _set_ext_present)
131
133 dpkt.Packet.unpack(self, buf)
134 self.data = buf[self.length:]
135
136 self.fields = []
137 buf = buf[self.__hdr_len__:]
138
139
140 field_decoder = [
141 ('tsft', self.tsft_present, self.TSFT),
142 ('flags', self.flags_present, self.Flags),
143 ('rate', self.rate_present, self.Rate),
144 ('channel', self.channel_present, self.Channel),
145 ('fhss', self.fhss_present, self.FHSS),
146 ('ant_sig', self.ant_sig_present, self.AntennaSignal),
147 ('ant_noise', self.ant_noise_present, self.AntennaNoise),
148 ('lock_qual', self.lock_qual_present, self.LockQuality),
149 ('tx_attn', self.tx_attn_present, self.TxAttenuation),
150 ('db_tx_attn', self.db_tx_attn_present, self.DbTxAttenuation),
151 ('dbm_tx_power', self.dbm_tx_power_present, self.DbmTxPower),
152 ('ant', self.ant_present, self.Antenna),
153 ('db_ant_sig', self.db_ant_sig_present, self.DbAntennaSignal),
154 ('db_ant_noise', self.db_ant_noise_present, self.DbAntennaNoise),
155 ('rx_flags', self.rx_flags_present, self.RxFlags)
156 ]
157 for name, present_bit, parser in field_decoder:
158 if present_bit:
159 field = parser(buf)
160 field.data = ''
161 setattr(self, name, field)
162 self.fields.append(field)
163 buf = buf[len(field):]
164
166 __hdr__ = (
167 ('index', 'B', 0),
168 )
169
171 __hdr__ = (
172 ('db', 'B', 0),
173 )
174
176 __hdr__ = (
177 ('db', 'B', 0),
178 )
179
181 __hdr__ = (
182 ('freq', 'H', 0),
183 ('flags', 'H', 0),
184 )
185
186 - class FHSS(dpkt.Packet):
187 __hdr__ = (
188 ('set', 'B', 0),
189 ('pattern', 'B', 0),
190 )
191
192 - class Flags(dpkt.Packet):
193 __hdr__ = (
194 ('val', 'B', 0),
195 )
196
198 __hdr__ = (
199 ('val', 'H', 0),
200 )
201
203 __hdr__ = (
204 ('val', 'H', 0),
205 )
206
207 - class Rate(dpkt.Packet):
208 __hdr__ = (
209 ('val', 'B', 0),
210 )
211
212 - class TSFT(dpkt.Packet):
213 __hdr__ = (
214 ('usecs', 'Q', 0),
215 )
216
218 __hdr__ = (
219 ('val', 'H', 0),
220 )
221
223 __hdr__ = (
224 ('db', 'H', 0),
225 )
226
228 __hdr__ = (
229 ('db', 'B', 0),
230 )
231
233 __hdr__ = (
234 ('db', 'B', 0),
235 )
236
238 __hdr__ = (
239 ('dbm', 'B', 0),
240 )
241
242 if __name__ == '__main__':
243 import unittest
244
268 unittest.main()
269