Esempio n. 1
0
 def testContains(self):
     self.assertTrue(ipaddr.IPv4('1.2.3.128/25') in self.ipv4)
     self.assertFalse(ipaddr.IPv4('1.2.4.1/24') in self.ipv4)
     self.assertFalse(self.ipv4 in self.ipv6)
     self.assertFalse(self.ipv6 in self.ipv4)
     self.assertTrue(self.ipv4 in self.ipv4)
     self.assertTrue(self.ipv6 in self.ipv6)
Esempio n. 2
0
    def testCollapsing(self):
        ip1 = ipaddr.IPv4('1.1.0.0/24')
        ip2 = ipaddr.IPv4('1.1.1.0/24')
        ip3 = ipaddr.IPv4('1.1.2.0/24')
        ip4 = ipaddr.IPv4('1.1.3.0/24')
        ip5 = ipaddr.IPv4('1.1.4.0/24')
        # stored in no particular order b/c we want CollapseAddr to call [].sort
        ip6 = ipaddr.IPv4('1.1.0.0/22')
        # check that addreses are subsumed properlly.
        collapsed = ipaddr.collapse_address_list(
            [ip1, ip2, ip3, ip4, ip5, ip6])
        self.assertEqual(
            collapsed, [ipaddr.IPv4('1.1.0.0/22'),
                        ipaddr.IPv4('1.1.4.0/24')])
        # test that two addresses are supernet'ed properlly
        collapsed = ipaddr.collapse_address_list([ip1, ip2])
        self.assertEqual(collapsed, [ipaddr.IPv4('1.1.0.0/23')])

        ip_same1 = ip_same2 = ipaddr.IPv4('1.1.1.1/32')
        self.assertEqual(ipaddr.collapse_address_list([ip_same1, ip_same2]),
                         [ip_same1])
        ip1 = ipaddr.IPv6('::2001:1/100')
        ip2 = ipaddr.IPv6('::2002:1/120')
        ip3 = ipaddr.IPv6('::2001:1/96')
        # test that ipv6 addresses are subsumed properly.
        collapsed = ipaddr.collapse_address_list([ip1, ip2, ip3])
        self.assertEqual(collapsed, [ip3])
Esempio n. 3
0
    def received_TCP(self, pkt):
        if (IPv6 in pkt):
            #Look for the entry in the mapping
            #If if doesn't exist, create a new one (with a random port).

            if ((pkt[IPv6].src, pkt[TCP].sport) in self.mapping.values()):
                for map_src, map_port in self.mapping.keys():
                    if (self.mapping[map_src, map_port] == (pkt[IPv6].src,
                                                            pkt[TCP].sport)):
                        break
            else:
                print "IPv6: Creating a new NAT64 mapping entry:", pkt[
                    IPv6].src, "  ", pkt[TCP].sport
                src_port = int(random.random() * 65535)
                self.mapping[(self.srcv4, src_port)] = (pkt[IPv6].src,
                                                        pkt[TCP].sport)
                map_src, map_port = self.srcv4, src_port

            #extract the destination
            #Fill up the important information for the new packet

            dstv4 = str(
                ipaddr.IPv4(int(hex(ipaddr.IPv6(pkt[IPv6].dst))[18:26],
                                16)).ip_ext_full)
            new_ipv4_packet = IP(src=map_src, dst=dstv4,
                                 ttl=pkt[IPv6].hlim) / pkt[TCP]
            new_ipv4_packet[TCP].sport = map_port

            #Remove checksum to force scapy to recompute it
            #and send the packet in IPv4

            new_ipv4_packet[TCP].chksum = None
            self.send(new_ipv4_packet)

        if (IP in pkt):
            #Try to find the corresponding mapping entry
            try:
                #Extract the source IPv6 and the dport from the mapping
                (srcv6, map_port) = self.mapping[(pkt[IP].dst, pkt[TCP].dport)]

                #Build the destination and fill up important information
                dstv6 = str(
                    ipaddr.IPv6(
                        int(
                            self.pref64[:18] +
                            hex(ipaddr.IPv4(pkt[IP].src))[2:10] +
                            self.pref64[26:34], 16)))
                new_ipv6_packet = IPv6(src=dstv6, dst=srcv6,
                                       hlim=pkt[IP].ttl) / pkt[TCP]
                new_ipv6_packet[TCP].dport = map_port

                #Remove checksum to force scapy to recompute it
                #and send the packet in IPv6
                new_ipv6_packet[TCP].chksum = None
                self.send(new_ipv6_packet)

            except KeyError:
                print "IPv4: Mapping entry not found:", pkt[IP].dst, "  ", pkt[
                    TCP].dport
Esempio n. 4
0
    def testGetSupernet(self):
        self.assertEqual(self.ipv4.supernet().prefixlen, 23)
        self.assertEqual(self.ipv4.supernet().network_ext, '1.2.2.0')
        self.assertEqual(
            ipaddr.IPv4('0.0.0.0/0').supernet(), ipaddr.IPv4('0.0.0.0/0'))

        self.assertEqual(self.ipv6.supernet().prefixlen, 63)
        self.assertEqual(self.ipv6.supernet().network_ext,
                         '2001:658:22a:cafe::')
        self.assertEqual(ipaddr.IPv6('::0/0').supernet(), ipaddr.IPv6('::0/0'))
Esempio n. 5
0
 def _inet_pton(family, addr):
     if family == socket.AF_INET:
         return ipaddr.IPv4(addr).packed
     elif family == socket.AF_INET6:
         return ipaddr.IPv6(addr).packed
     else:
         raise ValueError("Unknown protocol family " + family)
Esempio n. 6
0
    def testZeroNetmask(self):
        ipv4_zero_netmask = ipaddr.IPv4('1.2.3.4/0')
        self.assertEqual(ipv4_zero_netmask.netmask, 0)
        self.assert_(ipv4_zero_netmask._is_valid_netmask(str(0)))

        ipv6_zero_netmask = ipaddr.IPv6('::1/0')
        self.assertEqual(ipv6_zero_netmask.netmask, 0)
        self.assert_(ipv6_zero_netmask._is_valid_netmask(str(0)))
Esempio n. 7
0
    def testNetworkComparison(self):
        # ip1 and ip2 have the same network address
        ip1 = ipaddr.IPv4('1.1.1.0/24')
        ip2 = ipaddr.IPv4('1.1.1.1/24')
        ip3 = ipaddr.IPv4('1.1.2.0/24')

        self.assertTrue(ip1 < ip3)
        self.assertTrue(ip3 > ip2)

        self.assertEquals(ip1.compare_networks(ip2), 0)
        self.assertTrue(ip1._get_networks_key() == ip2._get_networks_key())
        self.assertEquals(ip1.compare_networks(ip3), -1)
        self.assertTrue(ip1._get_networks_key() < ip3._get_networks_key())

        ip1 = ipaddr.IPv6('2001::2000/96')
        ip2 = ipaddr.IPv6('2001::2001/96')
        ip3 = ipaddr.IPv6('2001:ffff::2000/96')

        self.assertTrue(ip1 < ip3)
        self.assertTrue(ip3 > ip2)
        self.assertEquals(ip1.compare_networks(ip2), 0)
        self.assertTrue(ip1._get_networks_key() == ip2._get_networks_key())
        self.assertEquals(ip1.compare_networks(ip3), -1)
        self.assertTrue(ip1._get_networks_key() < ip3._get_networks_key())

        # Test comparing different protocols
        ipv6 = ipaddr.IPv6('::/0')
        ipv4 = ipaddr.IPv4('0.0.0.0/0')
        self.assertTrue(ipv6 > ipv4)
        self.assertTrue(ipv4 < ipv6)

        # Regression test for issue 19.
        ip1 = ipaddr.IP('10.1.2.128/25')
        self.assertFalse(ip1 < ip1)
        self.assertFalse(ip1 > ip1)
        ip2 = ipaddr.IP('10.1.3.0/24')
        self.assertTrue(ip1 < ip2)
        self.assertFalse(ip2 < ip1)
        self.assertFalse(ip1 > ip2)
        self.assertTrue(ip2 > ip1)
        ip3 = ipaddr.IP('10.1.3.0/25')
        self.assertTrue(ip2 < ip3)
        self.assertFalse(ip3 < ip2)
        self.assertFalse(ip2 > ip3)
        self.assertTrue(ip3 > ip2)
Esempio n. 8
0
 def testEmbeddedIpv4(self):
     ipv4_string = '192.168.0.1'
     ipv4 = ipaddr.IPv4(ipv4_string)
     v4compat_ipv6 = ipaddr.IPv6('::%s' % ipv4_string)
     self.assertEquals(v4compat_ipv6.ip, ipv4.ip)
     v4mapped_ipv6 = ipaddr.IPv6('::ffff:%s' % ipv4_string)
     self.assertNotEquals(v4mapped_ipv6.ip, ipv4.ip)
     self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6,
                       '2001:1.1.1.1:1.1.1.1')
Esempio n. 9
0
    def testNotEquals(self):
        self.assertFalse(self.ipv4 != ipaddr.IPv4('1.2.3.4/24'))
        self.assertTrue(self.ipv4 != ipaddr.IPv4('1.2.3.4/23'))
        self.assertTrue(self.ipv4 != ipaddr.IPv4('1.2.3.5/24'))
        self.assertTrue(self.ipv4 != ipaddr.IPv6('::1.2.3.4/24'))
        self.assertTrue(self.ipv4 != '')
        self.assertTrue(self.ipv4 != [])
        self.assertTrue(self.ipv4 != 2)

        self.assertFalse(
            self.ipv6 != ipaddr.IPv6('2001:658:22a:cafe:200::1/64'))
        self.assertTrue(
            self.ipv6 != ipaddr.IPv6('2001:658:22a:cafe:200::1/63'))
        self.assertTrue(
            self.ipv6 != ipaddr.IPv6('2001:658:22a:cafe:200::2/64'))
        self.assertTrue(self.ipv6 != ipaddr.IPv4('1.2.3.4/23'))
        self.assertTrue(self.ipv6 != '')
        self.assertTrue(self.ipv6 != [])
        self.assertTrue(self.ipv6 != 2)
Esempio n. 10
0
 def testGetitem(self):
     # http://code.google.com/p/ipaddr-py/issues/detail?id=15
     addr = ipaddr.IPv4('172.31.255.128/255.255.255.240')
     self.assertEqual(28, addr.prefixlen)
     addr_list = list(addr)
     self.assertEqual('172.31.255.128', addr_list[0])
     self.assertEqual('172.31.255.128', addr[0])
     self.assertEqual('172.31.255.143', addr_list[-1])
     self.assertEqual('172.31.255.143', addr[-1])
     self.assertEqual(addr_list[-1], addr[-1])
Esempio n. 11
0
    def testIPv4PrefixFromInt(self):
        addr1 = ipaddr.IP('10.1.1.0/24')
        addr2 = ipaddr.IPv4(addr1.ip)  # clone prefix
        addr2.set_prefix(addr1.prefixlen)
        addr3 = ipaddr.IP(123456)

        self.assertEqual(123456, addr3.ip)
        self.assertRaises(ipaddr.IPv4NetmaskValidationError, addr2.set_prefix,
                          -1L)
        self.assertEqual(addr1, addr2)
        self.assertEqual(str(addr1), str(addr2))
Esempio n. 12
0
    def testIpFromInt(self):
        self.assertEqual(self.ipv4.ip, ipaddr.IPv4(16909060).ip)
        self.assertRaises(ipaddr.IPv4IpValidationError, ipaddr.IPv4, 2**32)
        self.assertRaises(ipaddr.IPv4IpValidationError, ipaddr.IPv4, -1)

        self.assertEqual(
            self.ipv6.ip,
            ipaddr.IPv6(42540616829182469433547762482097946625).ip)
        self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, 2**128)
        self.assertRaises(ipaddr.IPv6IpValidationError, ipaddr.IPv6, -1)

        self.assertEqual(ipaddr.IP(self.ipv4.ip).version, 4)
        self.assertEqual(ipaddr.IP(self.ipv6.ip).version, 6)
Esempio n. 13
0
 def testPacked(self):
     self.assertEqual(self.ipv4.packed,
                      _cb('\x01\x02\x03\x04'))
     self.assertEqual(ipaddr.IPv4('255.254.253.252').packed,
                      _cb('\xff\xfe\xfd\xfc'))
     self.assertEqual(self.ipv6.packed,
                      _cb('\x20\x01\x06\x58\x02\x2a\xca\xfe'
                          '\x02\x00\x00\x00\x00\x00\x00\x01'))
     self.assertEqual(ipaddr.IPv6('ffff:2:3:4:ffff::').packed,
                      _cb('\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff'
                         + '\x00' * 6))
     self.assertEqual(ipaddr.IPv6('::1:0:0:0:0').packed,
                      _cb('\x00' * 6 + '\x00\x01' + '\x00' * 8))
Esempio n. 14
0
 def testSlash32Constructor(self):
     self.assertEquals(str(ipaddr.IPv4('1.2.3.4/255.255.255.255')),
                       '1.2.3.4/32')
Esempio n. 15
0
 def testIpStrFromPrefixlen(self):
     ipv4 = ipaddr.IPv4('1.2.3.4/24')
     self.assertEquals(ipv4._ip_string_from_prefix(), '255.255.255.0')
     self.assertEquals(ipv4._ip_string_from_prefix(28), '255.255.255.240')
Esempio n. 16
0
 def testRepr(self):
     self.assertEqual("IPv4('1.2.3.4/32')", repr(ipaddr.IPv4('1.2.3.4')))
     self.assertEqual("IPv6('::1/128')", repr(ipaddr.IPv6('::1')))
Esempio n. 17
0
 def testSlash0Constructor(self):
     self.assertEquals(str(ipaddr.IPv4('1.2.3.4/0.0.0.0')), '1.2.3.4/0')
Esempio n. 18
0
 def setUp(self):
     self.ipv4 = ipaddr.IPv4('1.2.3.4/24')
     self.ipv4_hostmask = ipaddr.IPv4('10.0.0.1/0.255.255.255')
     self.ipv6 = ipaddr.IPv6('2001:658:22a:cafe:200:0:0:1/64')
Esempio n. 19
0
 def testGetSubnetForSingle32(self):
     ip = ipaddr.IPv4('1.2.3.4/32')
     subnets1 = [str(x) for x in ip.subnet()]
     subnets2 = [str(x) for x in ip.subnet(2)]
     self.assertEqual(subnets1, ['1.2.3.4/32'])
     self.assertEqual(subnets1, subnets2)