1'use strict'; 2require('../common'); 3const assert = require('assert'); 4const net = require('net'); 5 6const v6 = [ 7 '::', 8 '1::', 9 '::1', 10 '1::8', 11 '1::7:8', 12 '1:2:3:4:5:6:7:8', 13 '1:2:3:4:5:6::8', 14 '1:2:3:4:5:6:7::', 15 '1:2:3:4:5::7:8', 16 '1:2:3:4:5::8', 17 '1:2:3::8', 18 '1::4:5:6:7:8', 19 '1::6:7:8', 20 '1::3:4:5:6:7:8', 21 '1:2:3:4::6:7:8', 22 '1:2::4:5:6:7:8', 23 '::2:3:4:5:6:7:8', 24 '1:2::8', 25 '2001:0000:1234:0000:0000:C1C0:ABCD:0876', 26 '3ffe:0b00:0000:0000:0001:0000:0000:000a', 27 'FF02:0000:0000:0000:0000:0000:0000:0001', 28 '0000:0000:0000:0000:0000:0000:0000:0001', 29 '0000:0000:0000:0000:0000:0000:0000:0000', 30 '::ffff:192.168.1.26', 31 '2::10', 32 'ff02::1', 33 'fe80::', 34 '2002::', 35 '2001:db8::', 36 '2001:0db8:1234::', 37 '::ffff:0:0', 38 '::ffff:192.168.1.1', 39 '1:2:3:4::8', 40 '1::2:3:4:5:6:7', 41 '1::2:3:4:5:6', 42 '1::2:3:4:5', 43 '1::2:3:4', 44 '1::2:3', 45 '::2:3:4:5:6:7', 46 '::2:3:4:5:6', 47 '::2:3:4:5', 48 '::2:3:4', 49 '::2:3', 50 '::8', 51 '1:2:3:4:5:6::', 52 '1:2:3:4:5::', 53 '1:2:3:4::', 54 '1:2:3::', 55 '1:2::', 56 '1:2:3:4::7:8', 57 '1:2:3::7:8', 58 '1:2::7:8', 59 '1:2:3:4:5:6:1.2.3.4', 60 '1:2:3:4:5::1.2.3.4', 61 '1:2:3:4::1.2.3.4', 62 '1:2:3::1.2.3.4', 63 '1:2::1.2.3.4', 64 '1::1.2.3.4', 65 '1:2:3:4::5:1.2.3.4', 66 '1:2:3::5:1.2.3.4', 67 '1:2::5:1.2.3.4', 68 '1::5:1.2.3.4', 69 '1::5:11.22.33.44', 70 'fe80::217:f2ff:254.7.237.98', 71 'fe80::217:f2ff:fe07:ed62', 72 '2001:DB8:0:0:8:800:200C:417A', 73 'FF01:0:0:0:0:0:0:101', 74 '0:0:0:0:0:0:0:1', 75 '0:0:0:0:0:0:0:0', 76 '2001:DB8::8:800:200C:417A', 77 'FF01::101', 78 '0:0:0:0:0:0:13.1.68.3', 79 '0:0:0:0:0:FFFF:129.144.52.38', 80 '::13.1.68.3', 81 '::FFFF:129.144.52.38', 82 'fe80:0000:0000:0000:0204:61ff:fe9d:f156', 83 'fe80:0:0:0:204:61ff:fe9d:f156', 84 'fe80::204:61ff:fe9d:f156', 85 'fe80:0:0:0:204:61ff:254.157.241.86', 86 'fe80::204:61ff:254.157.241.86', 87 'fe80::1', 88 '2001:0db8:85a3:0000:0000:8a2e:0370:7334', 89 '2001:db8:85a3:0:0:8a2e:370:7334', 90 '2001:db8:85a3::8a2e:370:7334', 91 '2001:0db8:0000:0000:0000:0000:1428:57ab', 92 '2001:0db8:0000:0000:0000::1428:57ab', 93 '2001:0db8:0:0:0:0:1428:57ab', 94 '2001:0db8:0:0::1428:57ab', 95 '2001:0db8::1428:57ab', 96 '2001:db8::1428:57ab', 97 '::ffff:12.34.56.78', 98 '::ffff:0c22:384e', 99 '2001:0db8:1234:0000:0000:0000:0000:0000', 100 '2001:0db8:1234:ffff:ffff:ffff:ffff:ffff', 101 '2001:db8:a::123', 102 '::ffff:192.0.2.128', 103 '::ffff:c000:280', 104 'a:b:c:d:e:f:f1:f2', 105 'a:b:c::d:e:f:f1', 106 'a:b:c::d:e:f', 107 'a:b:c::d:e', 108 'a:b:c::d', 109 '::a', 110 '::a:b:c', 111 '::a:b:c:d:e:f:f1', 112 'a::', 113 'a:b:c::', 114 'a:b:c:d:e:f:f1::', 115 'a:bb:ccc:dddd:000e:00f:0f::', 116 '0:a:0:a:0:0:0:a', 117 '0:a:0:0:a:0:0:a', 118 '2001:db8:1:1:1:1:0:0', 119 '2001:db8:1:1:1:0:0:0', 120 '2001:db8:1:1:0:0:0:0', 121 '2001:db8:1:0:0:0:0:0', 122 '2001:db8:0:0:0:0:0:0', 123 '2001:0:0:0:0:0:0:0', 124 'A:BB:CCC:DDDD:000E:00F:0F::', 125 '0:0:0:0:0:0:0:a', 126 '0:0:0:0:a:0:0:0', 127 '0:0:0:a:0:0:0:0', 128 'a:0:0:a:0:0:a:a', 129 'a:0:0:a:0:0:0:a', 130 'a:0:0:0:a:0:0:a', 131 'a:0:0:0:a:0:0:0', 132 'a:0:0:0:0:0:0:0', 133 'fe80::7:8%eth0', 134 'fe80::7:8%1', 135]; 136 137const v6not = [ 138 '', 139 '1:', 140 ':1', 141 '11:36:12', 142 '02001:0000:1234:0000:0000:C1C0:ABCD:0876', 143 '2001:0000:1234:0000:00001:C1C0:ABCD:0876', 144 '2001:0000:1234: 0000:0000:C1C0:ABCD:0876', 145 '2001:1:1:1:1:1:255Z255X255Y255', 146 '3ffe:0b00:0000:0001:0000:0000:000a', 147 'FF02:0000:0000:0000:0000:0000:0000:0000:0001', 148 '3ffe:b00::1::a', 149 '::1111:2222:3333:4444:5555:6666::', 150 '1:2:3::4:5::7:8', 151 '12345::6:7:8', 152 '1::5:400.2.3.4', 153 '1::5:260.2.3.4', 154 '1::5:256.2.3.4', 155 '1::5:1.256.3.4', 156 '1::5:1.2.256.4', 157 '1::5:1.2.3.256', 158 '1::5:300.2.3.4', 159 '1::5:1.300.3.4', 160 '1::5:1.2.300.4', 161 '1::5:1.2.3.300', 162 '1::5:900.2.3.4', 163 '1::5:1.900.3.4', 164 '1::5:1.2.900.4', 165 '1::5:1.2.3.900', 166 '1::5:300.300.300.300', 167 '1::5:3000.30.30.30', 168 '1::400.2.3.4', 169 '1::260.2.3.4', 170 '1::256.2.3.4', 171 '1::1.256.3.4', 172 '1::1.2.256.4', 173 '1::1.2.3.256', 174 '1::300.2.3.4', 175 '1::1.300.3.4', 176 '1::1.2.300.4', 177 '1::1.2.3.300', 178 '1::900.2.3.4', 179 '1::1.900.3.4', 180 '1::1.2.900.4', 181 '1::1.2.3.900', 182 '1::300.300.300.300', 183 '1::3000.30.30.30', 184 '::400.2.3.4', 185 '::260.2.3.4', 186 '::256.2.3.4', 187 '::1.256.3.4', 188 '::1.2.256.4', 189 '::1.2.3.256', 190 '::300.2.3.4', 191 '::1.300.3.4', 192 '::1.2.300.4', 193 '::1.2.3.300', 194 '::900.2.3.4', 195 '::1.900.3.4', 196 '::1.2.900.4', 197 '::1.2.3.900', 198 '::300.300.300.300', 199 '::3000.30.30.30', 200 '2001:DB8:0:0:8:800:200C:417A:221', 201 'FF01::101::2', 202 '1111:2222:3333:4444::5555:', 203 '1111:2222:3333::5555:', 204 '1111:2222::5555:', 205 '1111::5555:', 206 '::5555:', 207 ':::', 208 '1111:', 209 ':', 210 ':1111:2222:3333:4444::5555', 211 ':1111:2222:3333::5555', 212 ':1111:2222::5555', 213 ':1111::5555', 214 ':::5555', 215 '1.2.3.4:1111:2222:3333:4444::5555', 216 '1.2.3.4:1111:2222:3333::5555', 217 '1.2.3.4:1111:2222::5555', 218 '1.2.3.4:1111::5555', 219 '1.2.3.4::5555', 220 '1.2.3.4::', 221 'fe80:0000:0000:0000:0204:61ff:254.157.241.086', 222 '123', 223 'ldkfj', 224 '2001::FFD3::57ab', 225 '2001:db8:85a3::8a2e:37023:7334', 226 '2001:db8:85a3::8a2e:370k:7334', 227 '1:2:3:4:5:6:7:8:9', 228 '1::2::3', 229 '1:::3:4:5', 230 '1:2:3::4:5:6:7:8:9', 231 '::ffff:2.3.4', 232 '::ffff:257.1.2.3', 233 '::ffff:12345678901234567890.1.26', 234 '2001:0000:1234:0000:0000:C1C0:ABCD:0876 0', 235 '02001:0000:1234:0000:0000:C1C0:ABCD:0876', 236]; 237 238v6.forEach((ip) => { 239 assert.strictEqual(net.isIPv6(ip), true); 240}); 241 242v6not.forEach((ip) => { 243 assert.strictEqual(net.isIPv6(ip), false); 244}); 245