CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-ip

IP address utilities for node.js providing IPv4/IPv6 address manipulation, validation, and network operations

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

address-validation.mddocs/

Address Validation

Functions for validating IP address formats and classifying addresses as private, public, or loopback with support for both IPv4 and IPv6 addresses.

Capabilities

Format Validation

isV4Format

Checks if a string is in valid IPv4 format using regex validation.

/**
 * Checks if string is valid IPv4 format
 * @param {string} ip - IP address string to validate
 * @returns {boolean} True if valid IPv4 format, false otherwise
 */
function isV4Format(ip);

Usage Examples:

const ip = require('ip');

console.log(ip.isV4Format('127.0.0.1')); // true
console.log(ip.isV4Format('192.168.1.1')); // true
console.log(ip.isV4Format('255.255.255.255')); // true
console.log(ip.isV4Format('256.1.1.1')); // false (invalid octet)
console.log(ip.isV4Format('::1')); // false (IPv6)
console.log(ip.isV4Format('not-an-ip')); // false

isV6Format

Checks if a string is in valid IPv6 format using regex validation.

/**
 * Checks if string is valid IPv6 format
 * @param {string} ip - IP address string to validate  
 * @returns {boolean} True if valid IPv6 format, false otherwise
 */
function isV6Format(ip);

Usage Examples:

const ip = require('ip');

console.log(ip.isV6Format('::1')); // true
console.log(ip.isV6Format('::ffff:127.0.0.1')); // true (IPv4-mapped)
console.log(ip.isV6Format('2001:db8::1')); // true
console.log(ip.isV6Format('fe80::1')); // true
console.log(ip.isV6Format('127.0.0.1')); // false (IPv4)
console.log(ip.isV6Format('invalid')); // false

Address Comparison

isEqual

Compares two IP addresses for equality, supporting IPv4, IPv6, and mixed comparisons with IPv6-mapped IPv4 addresses.

/**
 * Compares two IP addresses for equality
 * @param {string} a - First IP address
 * @param {string} b - Second IP address  
 * @returns {boolean} True if addresses are equal, false otherwise
 */
function isEqual(a, b);

Usage Examples:

const ip = require('ip');

// IPv4 comparisons
console.log(ip.isEqual('127.0.0.1', '127.0.0.1')); // true
console.log(ip.isEqual('127.0.0.1', '127.0.0.2')); // false

// IPv6 comparisons
console.log(ip.isEqual('::1', '::1')); // true
console.log(ip.isEqual('::1', '::2')); // false

// Mixed IPv4/IPv6 comparisons (IPv6-mapped IPv4)
console.log(ip.isEqual('127.0.0.1', '::ffff:127.0.0.1')); // true
console.log(ip.isEqual('127.0.0.1', '::7f00:1')); // true
console.log(ip.isEqual('127.0.0.1', '::ffaf:7f00:1')); // false

Address Classification

isPrivate

Checks if an IP address is in a private address range, including loopback addresses.

/**
 * Checks if IP address is in private range
 * @param {string} addr - IP address to check
 * @returns {boolean} True if address is private, false otherwise
 * @throws {Error} Throws error for invalid IPv4 address
 */
function isPrivate(addr);

Supported Private Ranges:

  • IPv4: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16 (link-local)
  • IPv6: fc00::/7 (unique local), fe80::/10 (link-local)
  • Loopback: 127.0.0.0/8 (IPv4), ::1, fe80::1 (IPv6)

Usage Examples:

const ip = require('ip');

// IPv4 private ranges
console.log(ip.isPrivate('10.0.0.1')); // true (10.x.x.x)
console.log(ip.isPrivate('172.16.0.1')); // true (172.16-31.x.x)
console.log(ip.isPrivate('192.168.1.1')); // true (192.168.x.x)
console.log(ip.isPrivate('169.254.1.1')); // true (link-local)
console.log(ip.isPrivate('127.0.0.1')); // true (loopback)

// IPv4 public addresses
console.log(ip.isPrivate('8.8.8.8')); // false
console.log(ip.isPrivate('1.1.1.1')); // false

// IPv6 addresses
console.log(ip.isPrivate('::1')); // true (loopback)
console.log(ip.isPrivate('fe80::1')); // true (link-local)
console.log(ip.isPrivate('fd12:3456:789a:1::1')); // true (unique local)

// IPv6-mapped IPv4
console.log(ip.isPrivate('::ffff:192.168.1.1')); // true

// Special formats (hex, octal)
console.log(ip.isPrivate('0x7f.1')); // true (127.0.0.1 in hex)

isPublic

Checks if an IP address is public (not private). This is the logical inverse of isPrivate.

/**
 * Checks if IP address is public (not private)
 * @param {string} addr - IP address to check
 * @returns {boolean} True if address is public, false otherwise
 */
function isPublic(addr);

Usage Examples:

const ip = require('ip');

console.log(ip.isPublic('8.8.8.8')); // true
console.log(ip.isPublic('1.1.1.1')); // true
console.log(ip.isPublic('192.168.1.1')); // false (private)
console.log(ip.isPublic('127.0.0.1')); // false (loopback)

isLoopback

Checks if an IP address is a loopback address, supporting various input formats including decimal, octal, hexadecimal, and long integer representations.

/**
 * Checks if IP address is loopback address
 * @param {string} addr - IP address to check (supports various formats)
 * @returns {boolean} True if address is loopback, false otherwise
 */
function isLoopback(addr);

Supported Loopback Ranges:

  • IPv4: 127.0.0.0/8 (any address starting with 127)
  • IPv6: ::1, fe80::1, ::

Usage Examples:

const ip = require('ip');

// Standard IPv4 loopback
console.log(ip.isLoopback('127.0.0.1')); // true
console.log(ip.isLoopback('127.8.8.8')); // true (any 127.x.x.x)

// IPv6 loopback
console.log(ip.isLoopback('::1')); // true
console.log(ip.isLoopback('fe80::1')); // true
console.log(ip.isLoopback('::')); // true

// Various IPv4 formats
console.log(ip.isLoopback('0177.0.0.1')); // true (octal)
console.log(ip.isLoopback('0x7f.0.0.1')); // true (hex)
console.log(ip.isLoopback('2130706433')); // true (long integer)

// Non-loopback addresses
console.log(ip.isLoopback('8.8.8.8')); // false
console.log(ip.isLoopback('192.168.1.1')); // false

docs

address-conversion.md

address-validation.md

bitwise-operations.md

index.md

network-interfaces.md

network-operations.md

tile.json