File: test_IP6_Address.py

package info (click to toggle)
impacket 0.13.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,264 kB
  • sloc: python: 137,329; makefile: 10; sh: 3
file content (148 lines) | stat: -rw-r--r-- 8,596 bytes parent folder | download | duplicates (2)
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)