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)