github.com/n00py/Slackor@v0.0.0-20200610224921-d007fcea1740/impacket/tests/dot11/test_RadioTap.py (about) 1 #!/usr/bin/env python 2 # sorry, this is very ugly, but I'm in python 2.5 3 import sys 4 import unittest 5 sys.path.insert(0, "../..") 6 7 from impacket.dot11 import RadioTap 8 from impacket.ImpactPacket import Data 9 10 11 class TestRadioTap(unittest.TestCase): 12 13 def setUp(self): 14 # RadioTap + 802.11 Data Frame + LLC SNAP + ARP Reply 15 self.frame_0 = b'' 16 self.frame_0 += b'\x00' # Header Revision 17 self.frame_0 += b'\x00' # Header Pad 18 self.frame_0 += b'\x18\x00' # Header Length 19 self.frame_0 += b'\x0e\x58\x00\x00' # Present Flags (flags, rate, channel, antenna, db antenna signal, rx flags) 20 self.frame_0 += b'\x10' # Flags (FCS at end) 21 self.frame_0 += b'\x6c' # Data Rate 22 self.frame_0 += b'\x6c\x09' # Channel Frequency 23 self.frame_0 += b'\x80\x04' # Channel Type 24 self.frame_0 += b'\x00' # Antenna 25 self.frame_0 += b'\x1e' # SSI Signal 26 self.frame_0 += b'\x00\x00' # RX Flags 27 self.frame_0 += b'\x00\x00\x00\x00\x00\x00\x08\x02\x2c\x00\x00\x1f\xe1\x19\xe4\xe4\x00\x1b\x9e\xce\x54\x09\x00' \ 28 b'\x1b\x9e\xce\x54\x09\xe0\xac\xaa\xaa\x03\x00\x00\x00\x08\x06\x00\x01\x08\x00\x06\x04\x00\x02' \ 29 b'\x00\x1b\x9e\xce\x54\x09\xc0\xa8\x01\x01\x00\x1f\xe1\x19\xe4\xe4\xc0\xa8\x01\x70\x01\x70\xe0' \ 30 b'\x00\x00\xfb\x94\x04\x00\x00\x16\x00\x00\x00\xe0\x00\x00\xfb\x17\x5c\xa6\xca' 31 self.rt0 = RadioTap(self.frame_0) 32 33 # RadioTap + 802.11 Data Frame + LLC SNAP + ARP Request 34 self.frame_1 = b'' 35 self.frame_1 += b'\x00' # Header Revision 36 self.frame_1 += b'\x00' # Header Pad 37 self.frame_1 += b'\x20\x00' # Header Length 38 # Present Flags (tsft, flags, rate, dbm antenna signal, dbm antenna noise, antenna, channel+) 39 self.frame_1 += b'\x67\x08\x04\x00' 40 self.frame_1 += b'\x30\x03\x1a\x25\x00\x00\x00\x00' # TSFT 41 self.frame_1 += b'\x22' # Flags (Data pad, preamble short) 42 self.frame_1 += b'\x0c' # Data Rate 43 self.frame_1 += b'\xd9' # SSI Signal 44 self.frame_1 += b'\xa0' # SSI Noise 45 self.frame_1 += b'\x02' # Antenna 46 self.frame_1 += b'\x00\x00\x00' # ??? 47 self.frame_1 += b'\x40\x01\x00\x00' # Channel Type 48 self.frame_1 += b'\x3c\x14' # Channel Frequency 49 self.frame_1 += b'\x24' # Channel Number 50 self.frame_1 += b'\x11' # ??? 51 self.frame_1 += b'\x08\x02\x00\x00\xff\xff\xff\xff\xff\xff\x06\x03\x7f\x07\xa0\x16\x00\x19\xe3\xd3\x53\x52' \ 52 b'\x90\x7f\xaa\xaa\x03\x00\x00\x00\x08\x06\x00\x01\x08\x00\x06\x04\x00\x01\x00\x19\xe3\xd3' \ 53 b'\x53\x52\xa9\xfe\xf7\x00\x00\x00\x00\x00\x00\x00\x43\x08\x0e\x36' 54 self.rt1 = RadioTap(self.frame_1) 55 56 # RadioTap + 802.11 Data Frame + LLC SNAP + ARP Request 57 self.frame_2 = b'' 58 self.frame_2 += b'\x00' # Header Revision 59 self.frame_2 += b'\x00' # Header Pad 60 self.frame_2 += b'\x24\x00' # Header Length 61 # Present Flags (tsft, flags, rate, channel, dbm antenna signal, rx flags, ns next, ext) 62 self.frame_2 += b'\x2f\x40\x00\xa0' 63 self.frame_2 += b'\x20\x08\x00\x00' # Present Flags (dbm antenna signal, antenna) 64 self.frame_2 += b'\x00\x00\x00\x00' # ??? 65 self.frame_2 += b'\x97\xd3\x26\x44\x06\x00\x00\x00' # TSFT 66 self.frame_2 += b'\x10' # Flags 67 self.frame_2 += b'\x02' # Data Rate 68 self.frame_2 += b'\x6c\x09' # Channel Frequency 69 self.frame_2 += b'\xc0\x00' # Channel Type 70 self.frame_2 += b'\xa6' # SSI Signal 71 self.frame_2 += b'\x00' # ??? 72 self.frame_2 += b'\x00\x00' # RX flags 73 self.frame_2 += b'\xa6' # SSI Signal 74 self.frame_2 += b'\x00' # ??? 75 self.frame_2 += b'\xd4\x00\x00\x00\x9c\x04\xeb\x4d\xdb\x53\x8d\xf3\xc6\xc3' 76 self.rt2 = RadioTap(self.frame_2) 77 78 # RadioTap + 802.11 Data Frame + LLC SNAP + ARP Request 79 self.frame_3 = b'' 80 self.frame_3 += b'\x00' # Header Revision 81 self.frame_3 += b'\x00' # Header Pad 82 self.frame_3 += b'\x24\x00' # Header Length 83 # Present Flags (tsft, flags, rate, channel, dbm antenna signal, rx flags, ns next, ext) 84 self.frame_3 += b'\x2f\x40\x00\xa0' 85 self.frame_3 += b'\x20\x08\x00\x80' # Present Flags (dbm antenna signal, antenna) 86 self.frame_3 += b'\x00\x00\x00\x00' # Present Flags 87 # self.frame_3 += '\x00\x00\x00\x00' # ??? 88 self.frame_3 += b'\x97\xd3\x26\x44\x06\x00\x00\x00' # TSFT 89 self.frame_3 += b'\x10' # Flags 90 self.frame_3 += b'\x02' # Data Rate 91 self.frame_3 += b'\x6c\x09' # Channel Frequency 92 self.frame_3 += b'\xc0\x00' # Channel Type 93 self.frame_3 += b'\xa6' # SSI Signal 94 self.frame_3 += b'\x00' # ??? 95 self.frame_3 += b'\x00\x00' # RX flags 96 self.frame_3 += b'\xa6' # SSI Signal 97 self.frame_3 += b'\x00' # ??? 98 self.frame_3 += b'\xd4\x00\x00\x00\x9c\x04\xeb\x4d\xdb\x53\x8d\xf3\xc6\xc3' 99 self.rt3 = RadioTap(self.frame_3) 100 101 102 def test_01_sizes(self): 103 """Test RadioTap frame sizes""" 104 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 105 self.assertEqual(self.rt0.get_header_size(), 24) 106 self.assertEqual(self.rt0.get_body_size(), len(self.frame_0)-24) 107 self.assertEqual(self.rt0.get_tail_size(), 0) 108 109 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 110 self.assertEqual(self.rt1.get_header_size(), 32) 111 self.assertEqual(self.rt1.get_body_size(), len(self.frame_1)-32) 112 self.assertEqual(self.rt1.get_tail_size(), 0) 113 114 def test_02_version(self): 115 """Test RadioTap version getter/setter""" 116 self.assertEqual(self.rt0.get_version(), 0x00) 117 self.rt0.set_version(1) 118 self.assertEqual(self.rt0.get_version(), 0x01) 119 120 self.assertEqual(self.rt1.get_version(), 0x00) 121 self.rt1.set_version(1) 122 self.assertEqual(self.rt1.get_version(), 0x01) 123 124 def test_03_present(self): 125 """Test RadioTap present getter""" 126 self.assertEqual(self.rt0.get_present(), 0x0000580e) 127 self.assertEqual(self.rt1.get_present(), 0x00040867) 128 129 def test_04_present_bits(self): 130 """Test RadioTap present bits tester""" 131 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_TSFT), False) 132 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_FLAGS), True) 133 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_RATE), True) 134 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_CHANNEL), True) 135 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_FHSS), False) 136 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_DBM_ANTSIGNAL), False) 137 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_DBM_ANTNOISE), False) 138 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_LOCK_QUALITY), False) 139 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_TX_ATTENUATION), False) 140 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_DB_TX_ATTENUATION), False) 141 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_DBM_TX_POWER), False) 142 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_ANTENNA), True) 143 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_DB_ANTSIGNAL), True) 144 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_DB_ANTNOISE), False) 145 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_FCS_IN_HEADER), True) 146 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_TX_FLAGS), False) 147 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_RTS_RETRIES), False) 148 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_DATA_RETRIES), False) 149 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_XCHANNEL), False) 150 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_EXT), False) 151 152 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_TSFT), True) 153 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_FLAGS), True) 154 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_RATE), True) 155 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_CHANNEL), False) 156 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_FHSS), False) 157 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_DBM_ANTSIGNAL), True) 158 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_DBM_ANTNOISE), True) 159 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_LOCK_QUALITY), False) 160 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_TX_ATTENUATION), False) 161 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_DB_TX_ATTENUATION), False) 162 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_DBM_TX_POWER), False) 163 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_ANTENNA), True) 164 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_DB_ANTSIGNAL), False) 165 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_DB_ANTNOISE), False) 166 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_FCS_IN_HEADER), False) 167 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_TX_FLAGS), False) 168 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_RTS_RETRIES), False) 169 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_DATA_RETRIES), False) 170 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_XCHANNEL), True) 171 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_EXT), False) 172 173 def test_05_tsft(self): 174 """Test RadioTap tstf getter""" 175 self.assertEqual(self.rt0.get_tsft(), None) 176 self.assertEqual(self.rt1.get_tsft(), 622461744) 177 178 def test_06_tsft(self): 179 """Test RadioTap tstf getter/setter""" 180 # When the field is new 181 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 182 self.assertEqual(self.rt0.get_header_size(), 24) 183 self.rt0.set_tsft(0x0102030405060708) 184 self.assertEqual(self.rt0.get_tsft(), 0x0102030405060708) 185 self.assertEqual(self.rt0.get_header_size(), 24+8) 186 187 # When exist the field 188 self.rt0.set_tsft(0x0807060504030201) 189 self.assertEqual(self.rt0.get_tsft(), 0x0807060504030201) 190 self.assertEqual(self.rt0.get_header_size(), 24+8) 191 192 def test_07_unset_fields(self): 193 """Test RadioTap unset field""" 194 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 195 self.assertEqual(self.rt0.get_header_size(), 24) 196 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_FLAGS), True) 197 self.rt0.unset_field(RadioTap.RTF_FLAGS) 198 self.assertEqual(self.rt0.get_size(), len(self.frame_0)-1) 199 self.assertEqual(self.rt0.get_header_size(), 24-1) 200 self.assertEqual(self.rt0.get_present_bit(RadioTap.RTF_FLAGS), False) 201 202 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 203 self.assertEqual(self.rt1.get_header_size(), 32) 204 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_TSFT), True) 205 self.rt1.unset_field(RadioTap.RTF_TSFT) 206 self.assertEqual(self.rt1.get_size(), len(self.frame_1)-8) 207 self.assertEqual(self.rt1.get_header_size(), 32-8) 208 self.assertEqual(self.rt1.get_present_bit(RadioTap.RTF_TSFT), False) 209 210 def test_08_flags_field(self): 211 """Test RadioTap flags getter/setter""" 212 # When exist the field 213 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 214 self.assertEqual(self.rt0.get_header_size(), 24) 215 self.assertEqual(self.rt0.get_flags(), 0x10) 216 self.rt0.set_flags(0xAB) 217 self.assertEqual(self.rt0.get_flags(), 0xAB) 218 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 219 self.assertEqual(self.rt0.get_header_size(), 24) 220 221 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 222 self.assertEqual(self.rt1.get_header_size(), 32) 223 self.assertEqual(self.rt1.get_flags(), 0x22) 224 self.rt1.set_flags(0xAB) 225 self.assertEqual(self.rt1.get_flags(), 0xAB) 226 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 227 self.assertEqual(self.rt1.get_header_size(), 32) 228 # TODO: Test the size when the field is new 229 230 def test_09_rate_field(self): 231 """Test RadioTap rate getter/setter""" 232 # When exist the field 233 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 234 self.assertEqual(self.rt0.get_header_size(), 24) 235 self.assertEqual(self.rt0.get_rate(), 0x6c) 236 self.rt0.set_rate(0xAB) 237 self.assertEqual(self.rt0.get_rate(), 0xAB) 238 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 239 self.assertEqual(self.rt0.get_header_size(), 24) 240 241 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 242 self.assertEqual(self.rt1.get_header_size(), 32) 243 self.assertEqual(self.rt1.get_rate(), 0x0c) 244 self.rt1.set_rate(0xAB) 245 self.assertEqual(self.rt1.get_rate(), 0xAB) 246 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 247 self.assertEqual(self.rt1.get_header_size(), 32) 248 # TODO: Test the size when the field is new 249 250 def test_10_channel_field(self): 251 """Test RadioTap channel getter/setter""" 252 # When exist the field 253 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 254 self.assertEqual(self.rt0.get_header_size(), 24) 255 self.assertEqual(self.rt0.get_channel(), (2412, 0x0480)) 256 self.rt0.set_channel(freq=1234, flags=0x5678) 257 self.assertEqual(self.rt0.get_channel(), (1234, 0x5678)) 258 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 259 self.assertEqual(self.rt0.get_header_size(), 24) 260 261 # When the field is new 262 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 263 self.assertEqual(self.rt1.get_header_size(), 32) 264 self.assertEqual(self.rt1.get_channel(), None) 265 self.rt1.set_channel(freq=1234, flags=0x5678) 266 self.assertEqual(self.rt1.get_channel(), (1234, 0x5678)) 267 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+4) 268 self.assertEqual(self.rt1.get_header_size(), 32+4) 269 270 def test_11_fhss_field(self): 271 """Test RadioTap FHSS getter/setter""" 272 # TODO: When exist the field 273 # When the field is new 274 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 275 self.assertEqual(self.rt1.get_header_size(), 32) 276 self.assertEqual(self.rt1.get_FHSS(), None) 277 self.rt1.set_FHSS(hop_set=0xAB, hop_pattern=0xCD) 278 self.assertEqual(self.rt1.get_FHSS(), (0xAB, 0xCD)) 279 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+2) 280 self.assertEqual(self.rt1.get_header_size(), 32+2) 281 282 def test_12_dbm_ant_signal_field(self): 283 """Test RadioTap dBm Antenna Signal getter/setter""" 284 # When exist the field 285 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 286 self.assertEqual(self.rt1.get_header_size(), 32) 287 self.assertEqual(self.rt1.get_dBm_ant_signal(), 0xd9) 288 self.rt1.set_dBm_ant_signal(signal=0xF1) 289 self.assertEqual(self.rt1.get_dBm_ant_signal(), 0xF1) 290 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 291 self.assertEqual(self.rt1.get_header_size(), 32) 292 293 # When the field is new 294 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 295 self.assertEqual(self.rt0.get_header_size(), 24) 296 self.assertEqual(self.rt0.get_dBm_ant_signal(), None) 297 self.rt0.set_dBm_ant_signal(signal=0xF1) 298 self.assertEqual(self.rt0.get_dBm_ant_signal(), 0xF1) 299 self.assertEqual(self.rt0.get_size(), len(self.frame_0)+1) 300 self.assertEqual(self.rt0.get_header_size(), 24+1) 301 302 def test_13_dbm_ant_noise_field(self): 303 """Test RadioTap dBm Antenna Noise getter/setter""" 304 # When exist the field 305 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 306 self.assertEqual(self.rt1.get_header_size(), 32) 307 self.assertEqual(self.rt1.get_dBm_ant_noise(), 0xa0) 308 self.rt1.set_dBm_ant_noise(signal=0xF1) 309 self.assertEqual(self.rt1.get_dBm_ant_noise(), 0xF1) 310 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 311 self.assertEqual(self.rt1.get_header_size(), 32) 312 313 # When the field is new 314 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 315 self.assertEqual(self.rt0.get_header_size(), 24) 316 self.assertEqual(self.rt0.get_dBm_ant_noise(), None) 317 self.rt0.set_dBm_ant_noise(signal=0xF1) 318 self.assertEqual(self.rt0.get_dBm_ant_noise(), 0xF1) 319 self.assertEqual(self.rt0.get_size(), len(self.frame_0)+1) 320 self.assertEqual(self.rt0.get_header_size(), 24+1) 321 322 def test_14_lock_quality_field(self): 323 """Test RadioTap Lock Quality getter/setter""" 324 # TODO: When exist the field 325 # When the field is new 326 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 327 self.assertEqual(self.rt1.get_header_size(), 32) 328 self.assertEqual(self.rt1.get_lock_quality(), None) 329 self.rt1.set_lock_quality(quality=0xABBA) 330 self.assertEqual(self.rt1.get_lock_quality(), 0xABBA) 331 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+2) 332 self.assertEqual(self.rt1.get_header_size(), 32+2) 333 334 def test_15_tx_attenuation_field(self): 335 """Test RadioTap Tx Attenuation getter/setter""" 336 # TODO: When exist the field 337 # When the field is new 338 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 339 self.assertEqual(self.rt1.get_header_size(), 32) 340 self.assertEqual(self.rt1.get_tx_attenuation(), None) 341 self.rt1.set_tx_attenuation(power=0xABBA) 342 self.assertEqual(self.rt1.get_tx_attenuation(), 0xABBA) 343 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+2) 344 self.assertEqual(self.rt1.get_header_size(), 32+2) 345 346 def test_16_dB_tx_attenuation_field(self): 347 """Test RadioTap dB Tx Attenuation getter/setter""" 348 # TODO: When exist the field 349 # When the field is new 350 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 351 self.assertEqual(self.rt1.get_header_size(), 32) 352 self.assertEqual(self.rt1.get_dB_tx_attenuation(), None) 353 self.rt1.set_dB_tx_attenuation(power=0xABBA) 354 self.assertEqual(self.rt1.get_dB_tx_attenuation(), 0xABBA) 355 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+2) 356 self.assertEqual(self.rt1.get_header_size(), 32+2) 357 358 def test_17_dbm_tx_power_field(self): 359 """Test RadioTap dBm Tx Power getter/setter""" 360 # TODO: When exist the field 361 # When the field is new 362 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 363 self.assertEqual(self.rt1.get_header_size(), 32) 364 self.assertEqual(self.rt1.get_dBm_tx_power(), None) 365 self.rt1.set_dBm_tx_power(power=-8) 366 self.assertEqual(self.rt1.get_dBm_tx_power(), -8) 367 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+1) 368 self.assertEqual(self.rt1.get_header_size(), 32+1) 369 370 def test_18_antenna_field(self): 371 """Test RadioTap Antenna getter/setter""" 372 # TODO: When the field is new 373 # When exist the field 374 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 375 self.assertEqual(self.rt1.get_header_size(), 32) 376 self.assertEqual(self.rt1.get_antenna(), 0x02) 377 self.rt1.set_antenna(antenna_index=0xF1) 378 self.assertEqual(self.rt1.get_antenna(), 0xF1) 379 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 380 self.assertEqual(self.rt1.get_header_size(), 32) 381 382 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 383 self.assertEqual(self.rt0.get_header_size(), 24) 384 self.assertEqual(self.rt0.get_antenna(), 0x00) 385 self.rt0.set_antenna(antenna_index=0xF1) 386 self.assertEqual(self.rt0.get_antenna(), 0xF1) 387 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 388 self.assertEqual(self.rt0.get_header_size(), 24) 389 390 def test_19_db_ant_signal_field(self): 391 """Test RadioTap dB Antenna Signal getter/setter""" 392 # When exist the field 393 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 394 self.assertEqual(self.rt0.get_header_size(), 24) 395 self.assertEqual(self.rt0.get_dB_ant_signal(), 0x1e) 396 self.rt0.set_dB_ant_signal(signal=0xF1) 397 self.assertEqual(self.rt0.get_dB_ant_signal(), 0xF1) 398 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 399 self.assertEqual(self.rt0.get_header_size(), 24) 400 401 # When the field is new 402 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 403 self.assertEqual(self.rt1.get_header_size(), 32) 404 self.assertEqual(self.rt1.get_dB_ant_signal(), None) 405 self.rt1.set_dB_ant_signal(signal=0xF1) 406 self.assertEqual(self.rt1.get_dB_ant_signal(), 0xF1) 407 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+1) 408 self.assertEqual(self.rt1.get_header_size(), 32+1) 409 410 def test_20_db_ant_noise_field(self): 411 """Test RadioTap dB Antenna Noise getter/setter""" 412 # TODO: When exist the field 413 # When the field is new 414 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 415 self.assertEqual(self.rt1.get_header_size(), 32) 416 self.assertEqual(self.rt1.get_dB_ant_noise(), None) 417 self.rt1.set_dB_ant_noise(signal=0xF1) 418 self.assertEqual(self.rt1.get_dB_ant_noise(), 0xF1) 419 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+1) 420 self.assertEqual(self.rt1.get_header_size(), 32+1) 421 422 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 423 self.assertEqual(self.rt0.get_header_size(), 24) 424 self.assertEqual(self.rt0.get_dB_ant_noise(), None) 425 self.rt0.set_dB_ant_noise(signal=0xF1) 426 self.assertEqual(self.rt0.get_dB_ant_noise(), 0xF1) 427 self.assertEqual(self.rt0.get_size(), len(self.frame_0)+1) 428 self.assertEqual(self.rt0.get_header_size(), 24+1) 429 430 # def test_21_rx_flags_field(self): 431 # """Test RadioTap RX Flags getter/setter""" 432 # # When the field is new 433 # # TODO: When exist the field 434 # self.assertEqual(self.rt2.get_size(),len(self.frame_orig_2)) 435 # self.assertEqual(self.rt2.get_header_size(),32) 436 # self.assertEqual(self.rt2.get_rx_flags(),None) 437 # self.rt2.set_rx_flags( signal=0xABBA ) 438 # self.assertEqual(self.rt2.get_rx_flags(),0xABBA) 439 # self.assertEqual(self.rt2.get_size(),len(self.frame_orig_2)+2) 440 # self.assertEqual(self.rt2.get_header_size(),32+2) 441 442 def test_22_fcs_in_header_field(self): 443 """Test RadioTap FCS in header getter/setter""" 444 # When exist the field 445 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 446 self.assertEqual(self.rt0.get_header_size(), 24) 447 self.assertEqual(self.rt0.get_FCS_in_header(), 0x00000000) 448 self.rt0.set_FCS_in_header(fcs=0x89ABCDEF) 449 self.assertEqual(self.rt0.get_FCS_in_header(), 0x89ABCDEF) 450 self.assertEqual(self.rt0.get_size(), len(self.frame_0)) 451 self.assertEqual(self.rt0.get_header_size(), 24) 452 453 # When the field is new 454 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 455 self.assertEqual(self.rt1.get_header_size(), 32) 456 self.assertEqual(self.rt1.get_FCS_in_header(), None) 457 self.rt1.set_FCS_in_header(fcs=0x89ABCDEF) 458 self.assertEqual(self.rt1.get_FCS_in_header(), 0x89ABCDEF) 459 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+4) 460 self.assertEqual(self.rt1.get_header_size(), 32+4) 461 462 # def test_23_rssi_field(self): 463 # """Test RadioTap RSSI getter/setter""" 464 # # When the field is new 465 # self.assertEqual(self.rt2.get_size(),len(self.frame_orig_2)) 466 # self.assertEqual(self.rt2.get_header_size(),32) 467 # self.assertEqual(self.rt2.get_RSSI(),None) 468 # self.rt2.set_RSSI( rssi=0xBA, max_rssi=0xAB ) 469 # self.assertEqual(self.rt2.get_RSSI(),( 0xBA, 0xAB)) 470 # self.assertEqual(self.rt2.get_size(),len(self.frame_orig_2)+2) 471 # self.assertEqual(self.rt2.get_header_size(),32+2) 472 # # TODO: When exist the field 473 474 def test_24_rts_retries_field(self): 475 """Test RadioTap RTS retries getter/setter""" 476 # When the field is new 477 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 478 self.assertEqual(self.rt1.get_header_size(), 32) 479 self.assertEqual(self.rt1.get_RTS_retries(), None) 480 self.rt1.set_RTS_retries(retries=0xBA) 481 self.assertEqual(self.rt1.get_RTS_retries(), 0xBA) 482 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+1) 483 self.assertEqual(self.rt1.get_header_size(), 32+1) 484 # TODO: When exist the field 485 486 def test_25_tx_flags_field(self): 487 """Test RadioTap TX flags getter/setter""" 488 # When the field is new 489 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 490 self.assertEqual(self.rt1.get_header_size(), 32) 491 self.assertEqual(self.rt1.get_tx_flags(), None) 492 self.rt1.set_tx_flags(flags=0xABBA) 493 self.assertEqual(self.rt1.get_tx_flags(), 0xABBA) 494 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+2) 495 self.assertEqual(self.rt1.get_header_size(), 32+2) 496 # TODO: When exist the field 497 498 def test_26_xchannel_field(self): 499 """Test RadioTap xchannel getter/setter""" 500 (ch_type, ch_freq, ch_num, ch_maxpower) = self.rt1.get_xchannel() 501 self.assertEqual(ch_type, 0x00000140) 502 self.assertEqual(ch_freq, 5180) 503 self.assertEqual(ch_num, 36) 504 self.assertEqual(ch_maxpower, 0x11) 505 (ch_type, ch_freq, ch_num, ch_maxpower) = (0x12345678, 1234, 12, 34) 506 self.rt1.set_xchannel(flags=ch_type, freq=ch_freq, channel=ch_num, maxpower=ch_maxpower) 507 (nch_type, nch_freq, nch_num, nch_maxpower) = self.rt1.get_xchannel() 508 self.assertEqual(ch_type, nch_type) 509 self.assertEqual(ch_freq, nch_freq) 510 self.assertEqual(ch_num, nch_num) 511 self.assertEqual(ch_maxpower, nch_maxpower) 512 513 def test_27_data_retries_field(self): 514 """Test RadioTap Data retries getter/setter""" 515 # When the field is new 516 self.assertEqual(self.rt1.get_size(), len(self.frame_1)) 517 self.assertEqual(self.rt1.get_header_size(), 32) 518 self.assertEqual(self.rt1.get_data_retries(), None) 519 self.rt1.set_data_retries(retries=0xAB) 520 self.assertEqual(self.rt1.get_data_retries(), 0xAB) 521 self.assertEqual(self.rt1.get_size(), len(self.frame_1)+1) 522 self.assertEqual(self.rt1.get_header_size(), 32+1) 523 # TODO: When exist the field 524 525 # def test_28_hardware_queue_field(self): 526 # """Test RadioTap Hardware Queue getter/setter""" 527 # # When the field is new 528 # self.assertEqual(self.rt2.get_size(),len(self.frame_orig_2)) 529 # self.assertEqual(self.rt2.get_header_size(),32) 530 # self.assertEqual(self.rt2.get_hardware_queue(),None) 531 # self.rt2.set_hardware_queue( queue=0xAB ) 532 # self.assertEqual(self.rt2.get_hardware_queue(),0xAB) 533 # self.assertEqual(self.rt2.get_size(),len(self.frame_orig_2)+1) 534 # self.assertEqual(self.rt2.get_header_size(),32+1) 535 # # TODO: When exist the field 536 537 def test_29_radiotap_length_field(self): 538 """Test RadioTap header length field""" 539 # RadioTap from scratch calling get_length() and then get_packet() 540 rt = RadioTap() 541 # 0x08 bytes is the minimal headers size: 542 # 1 byte Revision 543 # 1 byte pad 544 # 2 bytes header length 545 # 4 bytes present flags 546 self.assertEqual(rt.get_header_length(), 0x08) 547 raw_packet = rt.get_packet() 548 self.assertEqual(raw_packet, b"\x00\x00\x08\x00\x00\x00\x00\x00") 549 # RadioTap from scratch without call to get_length() 550 raw_packet = RadioTap().get_packet() 551 self.assertEqual(raw_packet, b"\x00\x00\x08\x00\x00\x00\x00\x00") 552 553 def test_30_radiotap_length_filed_with_payload(self): 554 """Test RadioTap header length field with payload""" 555 # RadioTap from scratch calling get_length() and then get_packet() 556 rt = RadioTap() 557 self.assertEqual(rt.get_header_length(), 0x08) 558 data = Data(b"aa") 559 rt.contains(data) 560 self.assertEqual(rt.get_header_length(), 0x08) # The header length is the same 561 raw_packet = rt.get_packet() 562 self.assertEqual(raw_packet, b"\x00\x00\x08\x00\x00\x00\x00\x00aa") 563 564 def test_31_radiotap_present_flags_extended(self): 565 """Test RadioTap extended present flags""" 566 self.assertEqual(self.rt2.get_present_bit(RadioTap.RTF_EXT), True) 567 self.assertEqual(self.rt2.get_present_bit(RadioTap.RTF_RATE), True) 568 self.assertEqual(self.rt2.get_present_bit(RadioTap.RTF_CHANNEL), True) 569 self.assertEqual(self.rt2.get_channel(), (2412, 192)) 570 self.assertEqual(self.rt2.get_rate(), 2) 571 self.assertEqual(self.rt2.get_dBm_ant_signal(), 0xa6) 572 self.assertEqual(self.rt3.get_present_bit(RadioTap.RTF_EXT), True) 573 self.assertEqual(self.rt3.get_present_bit(RadioTap.RTF_RATE), True) 574 self.assertEqual(self.rt3.get_present_bit(RadioTap.RTF_CHANNEL), True) 575 self.assertEqual(self.rt3.get_channel(), (2412, 192)) 576 self.assertEqual(self.rt3.get_rate(), 2) 577 self.assertEqual(self.rt3.get_dBm_ant_signal(), 0xa6) 578 579 if __name__ == "__main__": 580 suite = unittest.TestLoader().loadTestsFromTestCase(TestRadioTap) 581 unittest.TextTestRunner(verbosity=1).run(suite)