github.com/n00py/Slackor@v0.0.0-20200610224921-d007fcea1740/impacket/tests/dot11/test_WEPEncoder.py (about)

     1  #!/usr/bin/env python
     2  # sorry, this is very ugly, but I'm in python 2.5
     3  import sys
     4  sys.path.insert(0,"../..")
     5  
     6  import impacket.dot11
     7  import impacket.ImpactPacket
     8  from impacket.Dot11KeyManager import KeyManager
     9  from binascii import unhexlify
    10  import unittest
    11  
    12  class TestDot11WEPData(unittest.TestCase):
    13  
    14      def setUp(self):
    15          self.dot11 = impacket.dot11.Dot11(FCS_at_end = False)
    16          
    17          # dot11.fc
    18          self.dot11.set_version(0)
    19          self.dot11.set_type_n_subtype(impacket.dot11.Dot11Types.DOT11_TYPE_DATA_SUBTYPE_DATA)
    20  
    21          # dot11.fc.flags
    22          self.dot11.set_fromDS(0)
    23          self.dot11.set_toDS(1)
    24          self.dot11.set_moreFrag(0)
    25          self.dot11.set_retry(0)
    26          self.dot11.set_powerManagement(0)
    27          self.dot11.set_moreData(0)
    28          self.dot11.set_protectedFrame(1)
    29          self.dot11.set_order(0)
    30          
    31          # dot11.Data
    32          self.dot11data = impacket.dot11.Dot11DataFrame()
    33          self.dot11data.set_duration(44)
    34          self.dot11data.set_address1([0x00,0x21,0x29,0x68,0x33,0x5d]) # Bssid
    35          self.dot11data.set_address2([0x00,0x18,0xde,0x7c,0x37,0x9f]) # Source
    36          self.dot11data.set_address3([0x00,0x21,0x29,0x68,0x33,0x5d]) # Destination
    37          self.dot11data.set_fragment_number(0)
    38          self.dot11data.set_sequence_number(3439)
    39          
    40          # WEP
    41          self.wep = impacket.dot11.Dot11WEP()
    42          self.wep.set_iv(0x0c3165)
    43          self.wep.set_keyid(0)
    44          
    45          # WEPData
    46          self.wepdata = impacket.dot11.Dot11WEPData()
    47          
    48          # LLC
    49          self.llc = impacket.dot11.LLC()
    50          self.llc.set_DSAP(0xaa)
    51          self.llc.set_SSAP(0xaa)
    52          self.llc.set_control(0x03)
    53          
    54          # SNAP
    55          self.snap = impacket.dot11.SNAP()
    56          self.snap.set_OUI(0x000000)
    57          self.snap.set_protoID(0x0800)
    58          
    59          # IP
    60          self.ip = impacket.ImpactPacket.IP()
    61          self.ip.set_ip_v(0x04)
    62          self.ip.set_ip_tos(0x00)
    63          self.ip.set_ip_id(0xa607)
    64          # IP.flags
    65          self.ip.set_ip_rf(0)
    66          self.ip.set_ip_df(0)
    67          self.ip.set_ip_mf(0)
    68          #
    69          self.ip.set_ip_off(0)
    70          self.ip.set_ip_ttl(128)
    71          self.ip.set_ip_p(0x01) # ICMP
    72          self.ip.set_ip_src('192.168.1.102')
    73          self.ip.set_ip_dst('64.233.163.103')
    74          
    75          # ICMP
    76          self.icmp = impacket.ImpactPacket.ICMP()
    77          self.icmp.set_icmp_type(self.icmp.ICMP_ECHO)
    78          self.icmp.set_icmp_code(0x00)
    79          self.icmp.set_icmp_id(0x0400)
    80          self.icmp.set_icmp_seq(0x8405)
    81          
    82          # Data
    83          datastring = b'abcdefghijklmnopqrstuvwabcdefghi'
    84          self.data = impacket.ImpactPacket.Data( datastring )
    85          
    86          # Build the protocol stack
    87          self.dot11.contains(self.dot11data)
    88          self.dot11data.contains(self.wep)
    89          self.wep.contains(self.wepdata)
    90          self.wepdata.contains(self.llc)
    91          self.llc.contains(self.snap)
    92          self.snap.contains(self.ip)
    93          self.ip.contains(self.icmp)
    94          self.icmp.contains(self.data)
    95          
    96          # Instantiated the Key Manager
    97          self.km=KeyManager()
    98          self.km.add_key([0x00,0x21,0x29,0x68,0x33,0x5b],unhexlify('999cbb701ca2ef030e302dcc35'))
    99          
   100      def test_02(self):
   101          'Test ICV methods'
   102          self.assertEqual(self.wepdata.get_icv(),0x00000000)
   103          self.assertEqual(self.wepdata.get_computed_icv(),0xA1F93985)
   104          self.wepdata.set_icv(0xA1F93985)
   105          self.assertEqual(self.wepdata.get_icv(), self.wepdata.get_computed_icv())
   106          self.wepdata.set_icv(0x01020304)
   107          self.assertEqual(self.wepdata.get_icv(),0x01020304)
   108          
   109      def test_03(self):
   110          'Test WEPData creation from scratch with encryption'
   111          
   112          #print "\nWEP Data Decrypted [%s]"%hexlify(self.wepdata.get_packet())
   113          self.wepdata.set_icv(0xA1F93985)
   114          wep_enc=self.wep.get_encrypted_data(unhexlify('999cbb701ca2ef030e302dcc35'))
   115          #print "\nWEP Data Encrypted [%s]"%hexlify(wep_enc)
   116          self.assertEqual(wep_enc,unhexlify('8d2381e9251cb5aa83d2c716ba6ee18e7d3a2c71c00f6ab82fbc54c4b014ab03115edeccab2b18ebeb250f75eb6bf57fd65cb9e1b26e50ba4bb48b9f3471da9ecf12cb8f361b0253'))
   117          
   118          #print "\nDot11 decrypted [%s]"%hexlify(self.dot11.get_packet())
   119          self.wep.encrypt_frame(unhexlify('999cbb701ca2ef030e302dcc35'))
   120          #print "\nDot11 encrypted [%s]"%hexlify(self.dot11.get_packet())
   121  
   122  suite = unittest.TestLoader().loadTestsFromTestCase(TestDot11WEPData)
   123  unittest.TextTestRunner(verbosity=1).run(suite)