ipv46 is a small JavaScript library for parsing, formatting and sorting IPv4/6 addresses. It works on both Node.js and browser environments.
$ npm install @hownetworks/ipv46const{IP}=require("@hownetworks/ipv46");Returns the given string parsed into an IPv4 or IPv6 address object. If the string is not a valid address then the result is null.
IP.parse("192.0.2.1");// IPv4 { ... }IP.parse("2001:db8::1");// IPv6 { ... }IP.parse("non-address");// nullIP.parse supports IPv6 addresses with embedded IPv4 addresses.
IP.parse("2001:db8::192.0.2.1");// IPv6 { ... }Valid IPv4/6 address objects have their version as an attribute.
IP.parse("192.0.2.1").version;// 4IP.parse("2001:db8::1").version;// 6Address objects implement the toString method for turning the addresses back into strings. The strings are printed lower-cased sans any extra leading zeroes. IPv6 formatting follows the RFC 5952 recommendations, except that formatting doesn't output IPv6 addresses with embedded IPv4 addresses.
IP.parse("192.0.2.1").toString();// '192.0.2.1'IP.parse("2001:db8::1").toString();// '2001:db8::1'IP.parse("2001:db8::192.0.2.1").toString();// '2001:db8::c000:201'Compare and sort addresses. IP.cmp(a, b) returns:
- -1 if a is sorted before b
- 0 if a equals b
- 1 otherwise
consta=IP.parse("192.0.2.1");constb=IP.parse("203.0.113.0");IP.cmp(a,a);// 0IP.cmp(a,b);// -1IP.cmp(b,a);// 1IPv4 addresses are always sorted before IPv6 addresses.
constipv4=IP.parse("192.0.2.1");constipv6=IP.parse("2001:db8::1");IP.cmp(ipv4,ipv6);// -1Parsed addresses get normalized. For example extra leading zeroes don't matter in comparisons.
consta=IP.parse("2001:0db8::1");constb=IP.parse("2001:0db8:0000::0001")IP.cmp(a,b);// 0IP.cmp is directly compatible with Array#sort.
consta=IP.parse("2001:0db8::2");constb=IP.parse("2001:0db8::1")constc=IP.parse("2001:0db8::")[a,b,c].sort(IP.cmp);// [c, b, a]