1 The netaddr module provides CIDR address handling (IPv4, IPv6, MAC) as a 2 port of the LuCI luci-lib-ip library. Addresses are represented by 3 netaddr.range resource instances created through the netaddr.new(), netaddr.v4(), 4 netaddr.v6() and netaddr.mac() constructors, which accept address strings, 5 unsigned numbers, byte arrays (length 4 = IPv4, 6 = MAC, 16 = IPv6) 6 or sockaddr-like objects ({ address, family, interface }) and raise a 7 runtime exception on invalid input. 8 9 -- Testcase -- 10 import * as netaddr from 'netaddr'; 11 12 print(netaddr.new("192.168.1.1"), "\n"); 13 print(netaddr.new("192.168.1.1/24"), "\n"); 14 print(netaddr.new("10.0.0.1/255.255.0.0"), "\n"); 15 print(netaddr.new("10.0.0.1", "255.255.0.0"), "\n"); 16 print(netaddr.new("10.0.0.1/16", 8), "\n"); 17 print(netaddr.new("2001:db8::1"), "\n"); 18 print(netaddr.new("2001:0db8:0000:0000:0000:0000:0000:0001"), "\n"); 19 print(netaddr.new("2001:db8::1/64"), "\n"); 20 print(netaddr.new("fe80::1%lo"), "\n"); 21 print(netaddr.new("ffff::192.168.1.1"), "\n"); 22 print(netaddr.new("::"), "\n"); 23 print(netaddr.new("::1"), "\n"); 24 print(netaddr.new("00:11:22:33:44:55"), "\n"); 25 print(netaddr.new("00:11:22:33:44:55/16"), "\n"); 26 print(netaddr.new(0x01020304), "\n"); 27 print(netaddr.v4(0x01020304), "\n"); 28 print(netaddr.v6(1), "\n"); 29 print(netaddr.mac(0x001122334455), "\n"); 30 print(netaddr.new(0x001122334455, 16), "\n"); 31 print(netaddr.new([ 10, 24, 0, 1 ]), "\n"); 32 print(netaddr.new([ 0, 0x11, 0x22, 0xcc, 0xdd, 0xee ]), "\n"); 33 print(netaddr.new([ 0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ]), "\n"); 34 print(netaddr.v4([ 192, 168, 1, 1 ]), "\n"); 35 print(netaddr.v6([ 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ]), "\n"); 36 print(netaddr.mac([ 0xc0, 0xb6, 0xf9, 0, 0, 0 ]), "\n"); 37 print(netaddr.new([ 1, 2, 3, 4 ])[0], "\n"); 38 print(netaddr.new([ 1, 2, 3, 4 ]).family, "\n"); 39 print(netaddr.new([ 1, 2, 3, 4 ]).bits, "\n"); 40 print(netaddr.new([ 10, 0, 0, 1 ], 24).string(), "\n"); 41 print(netaddr.new({ address: "192.168.1.1" }), "\n"); 42 print(netaddr.new({ address: "2001:db8::1" }), "\n"); 43 print(netaddr.new({ family: 2, address: "10.0.0.1" }), "\n"); 44 print(netaddr.new({ family: 10, address: "fe80::1" }), "\n"); 45 print(netaddr.new({ family: 17, address: "00:11:22:33:44:55" }), "\n"); 46 print(netaddr.new({ family: 10, address: "fe80::1", interface: "lo" }), "\n"); 47 print(netaddr.new({ address: "fe80::1", interface: 1 }), "\n"); 48 print(netaddr.new({ address: "fe80::1", interface: 1 }).scope, "\n"); 49 print(netaddr.new({ address: "10.0.0.1/24" }), "\n"); 50 print(netaddr.new({ address: "fe80::1/64" }), "\n"); 51 print(netaddr.v4({ address: "1.2.3.4" }), "\n"); 52 print(netaddr.v6({ address: "fe80::2", interface: "lo" }), "\n"); 53 print(netaddr.mac({ family: 17, address: "aa:bb:cc:dd:ee:ff" }), "\n"); 54 print(netaddr.new({ family: 10, address: "fe80::1", interface: "lo" }).scope, "\n"); 55 print(netaddr.new({ address: "10.0.0.1" }, 24).string(), "\n"); 56 print(netaddr.v4("1.2.3.4", 24), "\n"); 57 print(netaddr.new("1.2.3.4").bits, "\n"); 58 print(netaddr.new("1.2.3.4/24").bits, "\n"); 59 print(netaddr.new("2001:db8::1/64").bits, "\n"); 60 print(netaddr.new("1.2.3.4").family, "\n"); 61 print(netaddr.new("2001:db8::1").family, "\n"); 62 print(netaddr.new("00:11:22:33:44:55").family, "\n"); 63 print(netaddr.new("fe80::1%lo").scope, "\n"); 64 print(netaddr.new("1.2.3.4").scope, "\n"); 65 print(netaddr.checkv4("1.2.3.4"), "\n"); 66 print(netaddr.checkv4("1.2.3.4/24"), "\n"); 67 print(netaddr.checkv4("999.1.1.1") == null, "\n"); 68 print(netaddr.checkv6("::1"), "\n"); 69 print(netaddr.checkv6("1.2.3.4") == null, "\n"); 70 print(netaddr.checkmac("00:11:22:33:44:55"), "\n"); 71 print(netaddr.checkmac("00:11:22:33:44") == null, "\n"); 72 73 a = netaddr.new("192.168.1.1/24"); 74 print(a.bits, ", ", a.family, ", ", a.netmask, "\n"); 75 print(a[0], ", ", a[-1], "\n"); 76 77 a = netaddr.v6("fe80::1%lo"); 78 print(a.scope, ", ", a.scopeid, ", ", a.bits, ", ", a.netmask, "\n"); 79 80 a = netaddr.mac("00:11:22:33:44:55"); 81 print(a.family, ", ", a.bits, ", ", a.netmask, ", ", a.scope, "\n"); 82 83 a.scope = 42; 84 print(a.scope, ", ", a.scopeid, "\n"); 85 86 a.scope = 3; 87 print(a.scope, "\n"); 88 89 a.scopeid = "lo"; 90 print(a.scopeid, ", ", a, "\n"); 91 92 a.scopeid = 1; 93 print(a.scopeid, "\n"); 94 95 a.bits = 33; 96 print(a.bits, "\n"); 97 98 a.bits = 16; 99 print(a.bits, ", ", a[0], "\n"); 100 101 a[3] = 200; 102 print(a, "\n"); 103 -- End -- 104 105 -- Args -- 106 -R 107 -- End -- 108 109 -- Expect stdout -- 110 192.168.1.1 111 192.168.1.1/24 112 10.0.0.1/16 113 10.0.0.1/16 114 10.0.0.1/8 115 2001:db8::1 116 2001:db8::1 117 2001:db8::1/64 118 fe80::1%lo 119 ffff::c0a8:101 120 :: 121 ::1 122 00:11:22:33:44:55 123 00:11:22:33:44:55/16 124 00:00:01:02:03:04 125 1.2.3.4 126 ::1 127 00:00:22:33:44:55 128 00:00:22:33:44:55 129 10.24.0.1 130 00:11:22:CC:DD:EE 131 fe80::1 132 192.168.1.1 133 2001:db8::1 134 C0:B6:F9:00:00:00 135 1 136 4 137 32 138 10.0.0.1 139 192.168.1.1 140 2001:db8::1 141 10.0.0.1 142 fe80::1 143 00:11:22:33:44:55 144 fe80::1%lo 145 fe80::1%lo 146 1 147 10.0.0.1/24 148 fe80::1/64 149 1.2.3.4 150 fe80::2%lo 151 AA:BB:CC:DD:EE:FF 152 1 153 10.0.0.1 154 1.2.3.4/24 155 32 156 24 157 64 158 4 159 6 160 1 161 1 162 0 163 1.2.3.4 164 1.2.3.4/24 165 true 166 ::1 167 true 168 00:11:22:33:44:55 169 true 170 24, 4, 255.255.255.0 171 192, 1 172 1, lo, 128, ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 173 1, 48, FF:FF:FF:FF:FF:FF, 0 174 42, 175 3 176 lo, 00:11:22:33:44:55%lo 177 lo 178 33 179 16, 0 180 00:11:22:C8:44:55%lo/16 181 -- End -- 182 183 -- Testcase -- 184 import * as netaddr from 'netaddr'; 185 186 try { 187 netaddr.new("bogus"); 188 print("no error\n"); 189 } 190 catch (e) { 191 print("new: ", e.message, "\n"); 192 } 193 194 try { 195 netaddr.v4("2001:db8::1"); 196 print("no error\n"); 197 } 198 catch (e) { 199 print("IPv4: ", e.message, "\n"); 200 } 201 202 try { 203 netaddr.v6("1.2.3.4"); 204 print("no error\n"); 205 } 206 catch (e) { 207 print("IPv6: ", e.message, "\n"); 208 } 209 210 try { 211 netaddr.mac("1.2.3.4"); 212 print("no error\n"); 213 } 214 catch (e) { 215 print("MAC: ", e.message, "\n"); 216 } 217 218 try { 219 netaddr.new("1.2.3.4", 99); 220 print("no error\n"); 221 } 222 catch (e) { 223 print("mask: ", e.message, "\n"); 224 } 225 226 try { 227 netaddr.new("1.2.3.4", "bogus"); 228 print("no error\n"); 229 } 230 catch (e) { 231 print("maskstr: ", e.message, "\n"); 232 } 233 234 try { 235 netaddr.new([ 1, 2, 3, 4, 5 ]); 236 print("no error\n"); 237 } 238 catch (e) { 239 print("arr5: ", e.message, "\n"); 240 } 241 242 try { 243 netaddr.new([]); 244 print("no error\n"); 245 } 246 catch (e) { 247 print("arr0: ", e.message, "\n"); 248 } 249 250 try { 251 netaddr.v4([ 0, 11, 22, 33, 44, 55 ]); 252 print("no error\n"); 253 } 254 catch (e) { 255 print("v4mac: ", e.message, "\n"); 256 } 257 258 try { 259 netaddr.v6([ 1, 2, 3, 4 ]); 260 print("no error\n"); 261 } 262 catch (e) { 263 print("v6v4: ", e.message, "\n"); 264 } 265 266 try { 267 netaddr.v4([ 1, 2, 3, 256 ]); 268 print("no error\n"); 269 } 270 catch (e) { 271 print("big: ", e.message, "\n"); 272 } 273 274 try { 275 netaddr.v4([ 1, 2, 3, -1 ]); 276 print("no error\n"); 277 } 278 catch (e) { 279 print("neg: ", e.message, "\n"); 280 } 281 282 try { 283 netaddr.v4([ 1, 2, 3, "4" ]); 284 print("no error\n"); 285 } 286 catch (e) { 287 print("str: ", e.message, "\n"); 288 } 289 290 try { 291 netaddr.new({ family: 2 }); 292 print("no error\n"); 293 } 294 catch (e) { 295 print("noaddr: ", e.message, "\n"); 296 } 297 298 try { 299 netaddr.new({ address: "bogus" }); 300 print("no error\n"); 301 } 302 catch (e) { 303 print("badaddr: ", e.message, "\n"); 304 } 305 306 try { 307 netaddr.v4({ family: 10, address: "2001:db8::1" }); 308 print("no error\n"); 309 } 310 catch (e) { 311 print("famv6: ", e.message, "\n"); 312 } 313 314 try { 315 netaddr.new({ family: 1, address: "1.2.3.4" }); 316 print("no error\n"); 317 } 318 catch (e) { 319 print("badfam: ", e.message, "\n"); 320 } 321 322 try { 323 netaddr.new({ family: 2, address: "1.2.3.4", interface: "lo" }); 324 print("no error\n"); 325 } 326 catch (e) { 327 print("ifacev4: ", e.message, "\n"); 328 } 329 330 try { 331 netaddr.new({ family: 10, address: "fe80::1", interface: "nosuchif99" }); 332 print("no error\n"); 333 } 334 catch (e) { 335 print("badiface: ", e.message, "\n"); 336 } 337 338 try { 339 netaddr.mac({ family: 2, address: "1.2.3.4" }); 340 print("no error\n"); 341 } 342 catch (e) { 343 print("macfam: ", e.message, "\n"); 344 } 345 346 try { 347 netaddr.new({ family: 10, address: "2001:db8::1", interface: "lo" }); 348 print("no error\n"); 349 } 350 catch (e) { 351 print("nonll: ", e.message, "\n"); 352 } 353 354 try { 355 netaddr.new({ address: "fe80::1", interface: -1 }); 356 print("no error\n"); 357 } 358 catch (e) { 359 print("negscope: ", e.message, "\n"); 360 } 361 -- End -- 362 363 -- Args -- 364 -R 365 -- End -- 366 367 -- Testcase -- 368 import * as netaddr from 'netaddr'; 369 370 let a = netaddr.v6("fe80::221:63ff:fe75:aa17", 64, "lo"); 371 print(a, "\n"); 372 print(a.scope, ", ", a.scopeid, "\n"); 373 374 a = netaddr.v6("2001:db8::1", 128, "eth0"); 375 print(a, ", ", a.scope, "\n"); 376 377 a = netaddr.new("fe80::1234%lo"); 378 print(a.unscopename, "\n"); 379 print(a.unscoped(), "\n"); 380 381 a.scopeid = 1; 382 print(a.scopeid, "\n"); 383 384 print(a.scoped(), "\n"); 385 386 -- Args -- 387 -R 388 -- End -- 389 390 -- Expect stdout -- 391 fe80::221:63ff:fe75:aa17%lo/64 392 1, lo 393 2001:db8::1, 0 394 lo 395 fe80::1234 396 lo 397 fe80::1234%lo 398 -- End -- 399 400 401 -- Args -- 402 -R 403 -- End -- 404 405 -- Expect stdout -- 406 new: Invalid address 407 IPv4: Invalid IPv4 address 408 IPv6: Invalid IPv6 address 409 MAC: Invalid MAC address 410 mask: Invalid netmask 411 maskstr: Invalid netmask 412 arr5: Invalid address 413 arr0: Invalid address 414 v4mac: Invalid IPv4 address 415 v6v4: Invalid IPv6 address 416 big: Invalid IPv4 address 417 neg: Invalid IPv4 address 418 str: Invalid IPv4 address 419 noaddr: Invalid address 420 badaddr: Invalid address 421 famv6: Invalid IPv4 address 422 badfam: Invalid address 423 ifacev4: Invalid address 424 badiface: Invalid scope 425 macfam: Invalid MAC address 426 nonll: Invalid address 427 negscope: Invalid scope 428 -- End --
This page was automatically generated by LXR 0.3.1. • OpenWrt