예제 #1
0
 def test__write(self):
     ts = int(time.time())
     expected_time = datetime.fromtimestamp(ts)
     pkt_sender_mac = '01:02:03:04:05:06'
     pkt_sender_ip = '192.168.0.1'
     pkt_target_ip = '192.168.0.2'
     pkt_target_mac = '00:00:00:00:00:00'
     eth_src = '02:03:04:05:06:07'
     eth_dst = 'ff:ff:ff:ff:ff:ff'
     arp_packet = make_arp_packet(pkt_sender_ip, pkt_sender_mac,
                                  pkt_target_ip, pkt_target_mac)
     arp = ARP(arp_packet,
               time=ts,
               src_mac=hex_str_to_bytes(eth_src),
               dst_mac=hex_str_to_bytes(eth_dst),
               vid=100)
     out = io.StringIO()
     arp.write(out)
     expected_output = dedent("""\
     ARP observed at {expected_time}:
        802.1q VLAN ID (VID): 100 (0x064)
             Ethernet source: {eth_src}
        Ethernet destination: {eth_dst}
               Hardware type: 0x0001
               Protocol type: 0x0800
     Hardware address length: 6
     Protocol address length: 4
                   Operation: 1 (request)
     Sender hardware address: {pkt_sender_mac}
     Sender protocol address: {pkt_sender_ip}
     Target hardware address: {pkt_target_mac}
     Target protocol address: {pkt_target_ip}
     """)
     self.assertThat(out.getvalue().strip(),
                     Equals(expected_output.format(**locals()).strip()))
예제 #2
0
 def test__bindings__skips_null_source_eui_for_request(self):
     pkt_sender_mac = '00:00:00:00:00:00'
     pkt_sender_ip = '192.168.0.1'
     pkt_target_ip = '192.168.0.2'
     pkt_target_mac = '00:00:00:00:00:00'
     arp = ARP(make_arp_packet(
         pkt_sender_ip, pkt_sender_mac, pkt_target_ip, pkt_target_mac,
         op=ARP_OPERATION.REQUEST))
     self.assertItemsEqual(arp.bindings(), [])
예제 #3
0
 def test__bindings__skips_null_target_eui_in_reply(self):
     pkt_sender_mac = '01:02:03:04:05:06'
     pkt_sender_ip = '192.168.0.1'
     pkt_target_ip = '192.168.0.2'
     pkt_target_mac = '00:00:00:00:00:00'
     arp = ARP(make_arp_packet(
         pkt_sender_ip, pkt_sender_mac, pkt_target_ip, pkt_target_mac,
         op=ARP_OPERATION.REPLY))
     self.assertItemsEqual(
         arp.bindings(), [(IPAddress(pkt_sender_ip), EUI(pkt_sender_mac))])
예제 #4
0
 def test__bindings__returns_sender_for_request(self):
     pkt_sender_mac = '01:02:03:04:05:06'
     pkt_sender_ip = '192.168.0.1'
     pkt_target_ip = '192.168.0.2'
     pkt_target_mac = '00:00:00:00:00:00'
     arp = ARP(make_arp_packet(
         pkt_sender_ip, pkt_sender_mac, pkt_target_ip, pkt_target_mac,
         op=ARP_OPERATION.REQUEST))
     self.assertItemsEqual(
         arp.bindings(), [(IPAddress(pkt_sender_ip), EUI(pkt_sender_mac))])
예제 #5
0
파일: test_arp.py 프로젝트: ocni-dtu/maas
 def test__bindings__skips_null_source_ip_for_request(self):
     pkt_sender_mac = "01:02:03:04:05:06"
     pkt_sender_ip = "0.0.0.0"
     pkt_target_ip = "192.168.0.2"
     pkt_target_mac = "00:00:00:00:00:00"
     arp = ARP(
         make_arp_packet(
             pkt_sender_ip,
             pkt_sender_mac,
             pkt_target_ip,
             pkt_target_mac,
             op=ARP_OPERATION.REQUEST,
         ))
     self.assertItemsEqual(arp.bindings(), [])
예제 #6
0
파일: test_arp.py 프로젝트: ocni-dtu/maas
 def test__bindings__skips_null_source_eui_in_reply(self):
     pkt_sender_mac = "00:00:00:00:00:00"
     pkt_sender_ip = "192.168.0.1"
     pkt_target_ip = "192.168.0.2"
     pkt_target_mac = "02:03:04:05:06:07"
     arp = ARP(
         make_arp_packet(
             pkt_sender_ip,
             pkt_sender_mac,
             pkt_target_ip,
             pkt_target_mac,
             op=ARP_OPERATION.REPLY,
         ))
     self.assertItemsEqual(
         arp.bindings(), [(IPAddress(pkt_target_ip), EUI(pkt_target_mac))])
예제 #7
0
파일: test_arp.py 프로젝트: ocni-dtu/maas
 def test__bindings__returns_sender_and_target_for_reply(self):
     pkt_sender_mac = "01:02:03:04:05:06"
     pkt_sender_ip = "192.168.0.1"
     pkt_target_ip = "192.168.0.2"
     pkt_target_mac = "02:03:04:05:06:07"
     arp = ARP(
         make_arp_packet(
             pkt_sender_ip,
             pkt_sender_mac,
             pkt_target_ip,
             pkt_target_mac,
             op=ARP_OPERATION.REPLY,
         ))
     self.assertItemsEqual(
         arp.bindings(),
         [
             (IPAddress(pkt_sender_ip), EUI(pkt_sender_mac)),
             (IPAddress(pkt_target_ip), EUI(pkt_target_mac)),
         ],
     )
예제 #8
0
 def test__properties(self):
     pkt_sender_mac = '01:02:03:04:05:06'
     pkt_sender_ip = '192.168.0.1'
     pkt_target_ip = '192.168.0.2'
     pkt_target_mac = '00:00:00:00:00:00'
     eth_src = '02:03:04:05:06:07'
     eth_dst = 'ff:ff:ff:ff:ff:ff'
     arp_packet = make_arp_packet(pkt_sender_ip, pkt_sender_mac,
                                  pkt_target_ip, pkt_target_mac)
     arp = ARP(arp_packet,
               src_mac=hex_str_to_bytes(eth_src),
               dst_mac=hex_str_to_bytes(eth_dst))
     self.assertThat(arp.source_eui, Equals(EUI(pkt_sender_mac)))
     self.assertThat(arp.target_eui, Equals(EUI(pkt_target_mac)))
     self.assertThat(arp.source_ip, Equals(IPAddress(pkt_sender_ip)))
     self.assertThat(arp.target_ip, Equals(IPAddress(pkt_target_ip)))
예제 #9
0
파일: test_arp.py 프로젝트: ocni-dtu/maas
 def test__properties(self):
     pkt_sender_mac = "01:02:03:04:05:06"
     pkt_sender_ip = "192.168.0.1"
     pkt_target_ip = "192.168.0.2"
     pkt_target_mac = "00:00:00:00:00:00"
     eth_src = "02:03:04:05:06:07"
     eth_dst = "ff:ff:ff:ff:ff:ff"
     arp_packet = make_arp_packet(pkt_sender_ip, pkt_sender_mac,
                                  pkt_target_ip, pkt_target_mac)
     arp = ARP(
         arp_packet,
         src_mac=hex_str_to_bytes(eth_src),
         dst_mac=hex_str_to_bytes(eth_dst),
     )
     self.assertThat(arp.source_eui, Equals(EUI(pkt_sender_mac)))
     self.assertThat(arp.target_eui, Equals(EUI(pkt_target_mac)))
     self.assertThat(arp.source_ip, Equals(IPAddress(pkt_sender_ip)))
     self.assertThat(arp.target_ip, Equals(IPAddress(pkt_target_ip)))
예제 #10
0
파일: test_arp.py 프로젝트: ocni-dtu/maas
 def test__is_valid__fails_for_invalid_packets(self):
     arp = ARP(b"\x00" * 28)
     self.assertFalse(arp.is_valid())
     arp = ARP(
         make_arp_packet(
             "192.168.0.1",
             "01:02:03:04:05:06",
             "192.168.0.2",
             hardware_type="0x0000",
         ))
     self.assertFalse(arp.is_valid())
     arp = ARP(
         make_arp_packet(
             "192.168.0.1",
             "01:02:03:04:05:06",
             "192.168.0.2",
             protocol="0x0000",
         ))
     self.assertFalse(arp.is_valid())
     arp = ARP(
         make_arp_packet(
             "192.168.0.1",
             "01:02:03:04:05:06",
             "192.168.0.2",
             hardware_length="0x00",
         ))
     self.assertFalse(arp.is_valid())
     arp = ARP(
         make_arp_packet(
             "192.168.0.1",
             "01:02:03:04:05:06",
             "192.168.0.2",
             protocol_length="0x00",
         ))
     self.assertFalse(arp.is_valid())
예제 #11
0
파일: test_arp.py 프로젝트: ocni-dtu/maas
 def test__is_valid__succeeds_for_normal_packet(self):
     arp_packet = make_arp_packet("192.168.0.1", "01:02:03:04:05:06",
                                  "192.168.0.2")
     arp = ARP(arp_packet)
     self.assertTrue(arp.is_valid())
예제 #12
0
 def test__is_valid__fails_for_invalid_packets(self):
     arp = ARP(b'\x00' * 28)
     self.assertFalse(arp.is_valid())
     arp = ARP(
         make_arp_packet('192.168.0.1',
                         '01:02:03:04:05:06',
                         '192.168.0.2',
                         hardware_type='0x0000'))
     self.assertFalse(arp.is_valid())
     arp = ARP(
         make_arp_packet('192.168.0.1',
                         '01:02:03:04:05:06',
                         '192.168.0.2',
                         protocol='0x0000'))
     self.assertFalse(arp.is_valid())
     arp = ARP(
         make_arp_packet('192.168.0.1',
                         '01:02:03:04:05:06',
                         '192.168.0.2',
                         hardware_length='0x00'))
     self.assertFalse(arp.is_valid())
     arp = ARP(
         make_arp_packet('192.168.0.1',
                         '01:02:03:04:05:06',
                         '192.168.0.2',
                         protocol_length='0x00'))
     self.assertFalse(arp.is_valid())