1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
#!/usr/bin/env python
# Impacket - Collection of Python classes for working with network protocols.
#
# Copyright Fortra, LLC and its affiliated companies
#
# All rights reserved.
#
# This software is provided under a slightly modified version
# of the Apache Software License. See the accompanying LICENSE file
# for more information.
#
import unittest
from impacket import IP6_Address
class TestIP6_Address(unittest.TestCase):
def runTest(self):
pass
def test_construction(self):
"""Test IP6 Address construction"""
normal_text_address = "FE80:1234:5678:ABCD:EF01:2345:6789:ABCD"
normal_binary_address = [0xFE, 0x80, 0x12, 0x34,
0x56, 0x78, 0xAB, 0xCD,
0xEF, 0x01, 0x23, 0x45,
0x67, 0x89, 0xAB, 0xCD]
oversized_text_address = "FE80:1234:5678:ABCD:EF01:2345:6789:ABCD:1234"
oversized_binary_address = [0xFE, 0x80, 0x12, 0x34,
0x56, 0x78, 0xAB, 0xCD,
0xEF, 0x01, 0x23, 0x45,
0x67, 0x89, 0xAB, 0xCD, 0x00]
subsized_text_address = "FE80:1234:5678:ABCD:EF01:2345:6789"
subsized_binary_address = [0xFE, 0x80, 0x12, 0x34,
0x56, 0x78, 0xAB, 0xCD,
0xEF, 0x01, 0x23, 0x45,
0x67, 0x89, 0xAB]
malformed_text_address_1 = "FE80:123456788:ABCD:EF01:2345:6789:ABCD"
malformed_text_address_2 = "ZXYW:1234:5678:ABCD:EF01:2345:6789:ABCD"
malformed_text_address_3 = "FFFFFF:1234:5678:ABCD:EF01:2345:67:ABCD"
empty_text_address = ""
empty_binary_address = []
self.assertTrue(IP6_Address.IP6_Address(normal_text_address),
"IP6 address construction with normal text address failed")
self.assertTrue(IP6_Address.IP6_Address(normal_binary_address),
"IP6 address construction with normal binary address failed")
self.assertRaises(Exception, IP6_Address.IP6_Address,
oversized_text_address) # , "IP6 address construction with oversized text address incorrectly succeeded")
self.assertRaises(Exception, IP6_Address.IP6_Address,
oversized_binary_address) # , "IP6 address construction with oversized binary address incorrectly succeeded")
self.assertRaises(Exception, IP6_Address.IP6_Address,
subsized_text_address) # , "IP6 address construction with subsized text address incorrectly succeeded")
self.assertRaises(Exception, IP6_Address.IP6_Address,
subsized_binary_address) # , "IP6 address construction with subsized binary address incorrectly succeeded")
self.assertRaises(Exception, IP6_Address.IP6_Address,
malformed_text_address_1) # , "IP6 address construction with malformed text address (#1) incorrectly succeeded")
self.assertRaises(Exception, IP6_Address.IP6_Address,
malformed_text_address_2) # , "IP6 address construction with malformed text address (#2) incorrectly succeeded")
self.assertRaises(Exception, IP6_Address.IP6_Address,
malformed_text_address_3) # , "IP6 address construction with malformed text address (#3) incorrectly succeeded")
self.assertRaises(Exception, IP6_Address.IP6_Address,
empty_text_address) # , "IP6 address construction with empty text address incorrectly succeeded")
self.assertRaises(Exception, IP6_Address.IP6_Address,
empty_binary_address) # , "IP6 address construction with empty binary address incorrectly succeeded")
def test_unicode_representation(self):
"""Test IP6 Unicode text representations"""
unicode_normal_text_address = u'FE80:1234:5678:ABCD:EF01:2345:6789:ABCD'
self.assertTrue(IP6_Address.IP6_Address(unicode_normal_text_address),
"IP6 address construction with UNICODE normal text address failed")
def test_conversions(self):
"""Test IP6 Address conversions."""
text_address = "FE80:1234:5678:ABCD:EF01:2345:6789:ABCD"
binary_address = [0xFE, 0x80, 0x12, 0x34,
0x56, 0x78, 0xAB, 0xCD,
0xEF, 0x01, 0x23, 0x45,
0x67, 0x89, 0xAB, 0xCD]
self.assertEqual(IP6_Address.IP6_Address(text_address).as_string(), text_address,
"IP6 address conversion text -> text failed")
self.assertEqual(IP6_Address.IP6_Address(binary_address).as_bytes(), binary_address,
"IP6 address conversion binary -> binary failed")
self.assertEqual(IP6_Address.IP6_Address(binary_address).as_string(), text_address,
"IP6 address conversion binary -> text failed")
self.assertEqual(IP6_Address.IP6_Address(text_address).as_bytes().tolist(), binary_address,
"IP6 address conversion text -> binary failed")
def test_compressions(self):
"""Test IP6 Address compressions."""
compressed_addresses = ["::",
"1::",
"::1",
"1::2",
"1::1:2:3",
"FE80:234:567:4::1"
]
full_addresses = ["0000:0000:0000:0000:0000:0000:0000:0000",
"0001:0000:0000:0000:0000:0000:0000:0000",
"0000:0000:0000:0000:0000:0000:0000:0001",
"0001:0000:0000:0000:0000:0000:0000:0002",
"0001:0000:0000:0000:0000:0001:0002:0003",
"FE80:0234:0567:0004:0000:0000:0000:0001"
]
for f, c in zip(full_addresses, compressed_addresses):
self.assertEqual(IP6_Address.IP6_Address(f).as_string(), c,
"IP6 address compression failed with full address: " + f)
self.assertEqual(IP6_Address.IP6_Address(c).as_string(False), f,
"IP6 address compression failed with compressed address:" + c)
def test_scoped_addresses(self):
"""Test scoped addresses."""
numeric_scoped_address = "FE80::1234:1%12"
self.assertEqual(IP6_Address.IP6_Address(numeric_scoped_address).as_string(), numeric_scoped_address,
"Numeric scoped address conversion failed on address: " + numeric_scoped_address)
self.assertEqual(IP6_Address.IP6_Address(numeric_scoped_address).get_scope_id(), "12",
"Numeric scope ID fetch failed on address: " + numeric_scoped_address)
self.assertEqual(IP6_Address.IP6_Address(numeric_scoped_address).get_unscoped_address(), "FE80::1234:1",
"Get unscoped address failed on address: " + numeric_scoped_address)
unscoped_address = "1::4:1"
self.assertEqual(IP6_Address.IP6_Address(unscoped_address).as_string(), unscoped_address,
"Unscoped address conversion failed on address: " + unscoped_address)
self.assertEqual(IP6_Address.IP6_Address(unscoped_address).get_scope_id(), "",
"Unscoped address scope ID fetch failed on address: " + unscoped_address)
self.assertEqual(IP6_Address.IP6_Address(unscoped_address).get_unscoped_address(), unscoped_address,
"Get unscoped address failed on address: " + unscoped_address)
text_scoped_address = "FE80::1234:1%BLAH"
self.assertEqual(IP6_Address.IP6_Address(text_scoped_address).as_string(), text_scoped_address,
"Text scoped address conversion failed on address: " + text_scoped_address)
self.assertEqual(IP6_Address.IP6_Address(text_scoped_address).get_scope_id(), "BLAH",
"Text scope ID fetch failed on address: " + text_scoped_address)
self.assertEqual(IP6_Address.IP6_Address(text_scoped_address).get_unscoped_address(), "FE80::1234:1",
"Get unscoped address failed on address: " + text_scoped_address)
empty_scoped_address = "FE80::1234:1%"
self.assertRaises(Exception, IP6_Address.IP6_Address, empty_scoped_address)
if __name__ == '__main__':
unittest.main(verbosity=1)
|