Skip to content

Repository files navigation

ip-bigint

Convert IPv4 and IPv6 addresses to and from BigInt. Compliant with RFC 5952 and RFC 4291.

Usage

import {parseIp, stringifyIp, normalizeIp} from "ip-bigint";

const parsedIp = parseIp("2001:db8::");
// => {number: 42540766411282592856903984951653826560n, version: 6}

stringifyIp(parsedIp);
// => "2001:db8::"

normalizeIp("2001:db8::0:0:1");
// => "2001:db8::1"

API

parseIp(ip: string, opts?: ParseOpts)

Parse an IP address string to a ParsedIP object. Throws if the string is not a valid IP address.

For IPv4 returns {number, version}. For IPv6 returns {number, version, [ipv4mapped], [scopeid]}.

opts: Options ParseOpts

  • validate: boolean - Whether to reject strings that are not well-formed IP addresses. Default: true.

Validation uses cidr-regex, so it follows the addressing rules: zero-padded IPv4 octets (01.02.03.04), IPv6 groups longer than four hex digits, and empty or otherwise malformed scope ids are all rejected. Versions before 10 accepted these and parsed them leniently.

Passing validate: false skips the check for input already known to be valid, at the cost of the guarantee: malformed input is then parsed on a best-effort basis and can produce a number above max4 or max6 for its version.

stringifyIp({number, version, [ipv4mapped], [scopeid]}: ParsedIP, opts?: StringifyOpts)

Convert a ParsedIP object back to an IP address string.

opts: Options StringifyOpts

  • compress: boolean - Whether to compress the IP. For IPv6, this means the "best representation" all-lowercase shortest possible form. Default: true.
  • hexify: boolean - Whether to convert IPv4-Mapped IPv6 addresses to hex. Default: false.
  • mapv4: boolean - Whether to convert IPv4-Mapped IPv6 addresses (e.g. ::ffff:127.0.0.1) to plain IPv4 (e.g. 127.0.0.1). Default: false.

normalizeIp(ip: string, opts?: NormalizeOpts)

Round-trip an IP address through parseIp and stringifyIp, effectively normalizing its representation.

opts: Options NormalizeOpts, which is validate plus every StringifyOpts key, as documented above.

max4

A bigint value that holds the biggest possible IPv4 address.

max6

A bigint value that holds the biggest possible IPv6 address.

ipVersion(ip: string)

Returns a integer of the IP version, 4, 6 or 0 if it's not a valid IP address. Before version 10 this only looked for the first . or :, so it reported a version for malformed strings like 999.1.1.1, which now return 0.

Related

  • is-cidr - Check if a string is an IP address in CIDR notation
  • cidr-regex - Regular expression for matching IP addresses in CIDR notation and bare IP addresses
  • cidr-tools - Tools to work with IPv4 and IPv6 CIDR network lists

License

© silverwind, distributed under BSD licence

About

Convert IPv4 and IPv6 addresses to and from BigInt

Topics

Resources

Stars

13 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages