ip-addresses

1.0.0 • Public • Published

ip-addresses

An ES6 module to facilitate working with IP addresses, ranges, subnets and iterations.

  1. Introduction
  2. Installation
  3. Usage
  4. Errors
  5. API
    5.1 Class: IPv4Address
        5.1.1 Property: value
        5.1.2 Property: class
        5.1.3 Property: private
        5.1.4 Method: toString
        5.1.5 Method: toBin
        5.1.6 Method: toArray
        5.1.7 Method: mask
    5.2 Class: IPv4Subnetmask
        5.2.1 Property: value
        5.2.2 Property: length
        5.2.3 Method: toString
        5.2.4 Method: toBin
        5.2.5 Method: toArray
        5.2.6 Method: invert
    5.3 Class: IPv4Range
        5.3.1 Property: firstAddress
        5.3.2 Property: lastAddress
        5.3.3 Property: length
        5.3.4 Method: contains
        5.3.5 Method: getIterator
    5.4 Class: IPv4Subnet
        5.4.1 Property: subnetMask
        5.4.2 Property: networkAddress
        5.4.3 Property: broadcastAddress
        5.4.4 Property: hosts
        5.3.5 Method: getHostsIterator

Introduction

This module facilitates working with IP addresses (v4 only).

Installation

$ npm install ip-addresses

Usage

IPv4 Addresses

All IPv4Address instances are created through IPAddresses.ipv4.address().

let IPAddresses = require('../index.js');
 
// Create an IPv4 address
let ip1 = IPAddresses.v4.address('192.168.1.1');
let ip2 = IPAddresses.v4.address([192, 168, 1, 1]);
let ip3 = IPAddresses.v4.address(ip1); // creates a duplicate
 
// Get the value for an addres
console.log(ip1.value);                 // yields 3232235777
console.log(ip1.toString());            // yields 192.168.1.1
console.log(ip1.toString(true));        // yields 192.168.001.001
console.log(ip1.toBin());               // yields 11000000101010000000000100000001
console.log(ip1.toBin(' '));            // yields 11000000 10101000 00000001 00000001
console.log(ip1.toBin('.'));            // yields 11000000.10101000.00000001.00000001
console.log(ip1.toArray());             // yields [192,168,1,1]
 
console.log(IPAddresses.v4.address('10.0.0.0').class);       // yields A
console.log(IPAddresses.v4.address('128.0.0.0').class);      // yields B
console.log(IPAddresses.v4.address('192.0.0.0').class);      // yields C
console.log(IPAddresses.v4.address('224.0.0.0').class);      // yields D
console.log(IPAddresses.v4.address('240.0.0.0').class);      // yields E
 
console.log(IPAddresses.v4.address('10.0.0.0').private);     // yields true
console.log(IPAddresses.v4.address('11.0.0.0').private);     // yields false
console.log(IPAddresses.v4.address('192.168.0.0').private);  // yields true
console.log(IPAddresses.v4.address('172.25.0.0').private);   // yields true
console.log(IPAddresses.v4.address('172.32.0.0').private);   // yields false

IPv4 Subnet masks

All IPv4Subnetmask instances are created through IPAddresses.ipv4.subnetmask().

let IPAddresses = require('../index.js');
 
// Create an IPv4 subnet mask
let sm1 = IPAddresses.v4.subnetmask('255.255.255.0');
let sm2 = IPAddresses.v4.subnetmask([255, 255, 255, 0]);
let sm3 = IPAddresses.v4.subnetmask(24);
let sm4 = IPAddresses.v4.subnetmask(sm1); // creates a duplicate
 
// Get the value for an addres
console.log(sm1.value);          // yields 4294967040
console.log(sm1.toString());     // yields 255.255.255.0
console.log(sm1.toString(true)); // yields 255.255.255.000
console.log(sm1.toBin());        // yields 11111111111111111111111100000000
console.log(sm1.toBin(' '));     // yields 11111111 11111111 11111111 00000000
console.log(sm1.toBin('.'));     // yields 11111111.11111111.11111111.00000000
console.log(sm1.toArray());      // yields [255,255,255,0]
console.log(sm1.length);         // yields 24

IPv4 Ranges

All IPv4Range instances are created through IPAddresses.ipv4.range().

let IPAddresses = require('../index.js');
 
// Create an IPv4 range
let range1 = IPAddresses.v4.range('192.168.1.10-192.168.1.19');
let range2 = IPAddresses.v4.range(range1); // creates a duplicate
 
// Get the value for an addres
console.log(range1.firstAddress.toString());  // yields 192.168.1.10
console.log(range1.lastAddress.toString());   // yields 192.168.1.19
console.log(range1.length);                   // yields 10
console.log(range1.contains('192.168.1.9'));  // yields false
console.log(range1.contains('192.168.1.11')); // yields true
 
let iterator = range1.getIterator();
let item;
while(!(item = iterator.next()).done)
    console.log(item.value.toString());
// yields 192.168.1.10
// yields 192.168.1.11
// yields 192.168.1.12
// yields 192.168.1.13
// yields 192.168.1.14
// yields 192.168.1.15
// yields 192.168.1.16
// yields 192.168.1.17
// yields 192.168.1.18
// yields 192.168.1.19

IPv4 Subnets

All IPv4Subnet instances are created through IPAddresses.ipv4.subnet().

let IPAddresses = require('../index.js');
 
// Create an IPv4 range
let sn1 = IPAddresses.v4.subnet('192.168.1.10/24');
let sn2 = IPAddresses.v4.subnet('192.168.1.10/255.255.255.0');
let sn3 = IPAddresses.v4.range(sn1); // creates a duplicate
 
// Get the value for an addres
console.log(sn1.firstAddress.toString());      // yields 192.168.1.0
console.log(sn1.networkAddress.toString());    // yields 192.168.1.0
console.log(sn1.lastAddress.toString());       // yields 192.168.1.255
console.log(sn1.broadcastAddress.toString());  // yields 192.168.1.255
console.log(sn1.length);                       // yields 256
console.log(sn1.hosts);                        // yields 254
console.log(sn1.contains('192.168.2.9'));      // yields false
console.log(sn1.contains('192.168.1.11'));     // yields true
 
let iterator = sn1.getHostsIterator();
let item;
while(!(item = iterator.next()).done)
    console.log(item.value.toString());
// yields 192.168.1.1
// yields 192.168.1.2
// yields 192.168.1.3
// ...
// yields 192.168.1.252
// yields 192.168.1.253
// yields 192.168.1.254

Errors

The API throws IPv4Error objects during the creation of new instances if the specification for a new address, subnet mask, range or subnet is invalid. IPv4Error is an extention of Error. IPv4Error is further extended into IPv4AddressError, IPv4SubnetmaskError, IPv4RangeError and IPv4SubnetError.

let IPAddresses = require('../index.js');
 
try {
    let ip0 = IPAddresses.v4.address('192.168.1');
}
catch(e) {
    console.log(e.constructor.name);    // yields IPv4AddressError
}
 
try {
    let sm0 = IPAddresses.v4.subnetmask('255.255.255.1');
}
catch(e) {
    console.log(e.constructor.name);    // yields IPv4SubnetmaskError
}
 
try {
    let range0 = IPAddresses.v4.range('192.168.1.0-192.168.1.2.3');
}
catch(e) {
    console.log(e.constructor.name);    // yields IPv4RangeError
}
 
try {
    let sn0 = IPAddresses.v4.subnet('192.168.1.1/65');
}
catch(e) {
    console.log(e.constructor.name);    // yields IPv4SubnetError
}
 

API

Class: IPv4Address

This class represents an IPv4 address, typically defined by a single 32bit unsigned integer.

Property: value

Readonly. The 32bit unsigned integer that representst the address.

Property: class

Readonly. The class of the IP address, A through E.

Property: private

Readonly. True if the IP address is in a private range. False otherwise.

Method: toString(use3Digits)

Returns the address in octet format, e.g. 192.168.1.1. If use3Digits is true toString() returns all octets left padded with zeros, e.g. 192.168.001.001.

Method: toBin(separator)

Returns the address in binary format, e.g. 11000000101010000000000100000001. If separator is set then its first character is used as a separator between the octets, e.g. 11000000 10101000 00000001 00000001 for a space character or 11000000.10101000.00000001.00000001 for a dot.

Method: toArray()

Returns the address as an array, e.g. [ 192, 168, 1, 1 ].

Method: mask(subnetmask)

Returns a new IPv4Address object with its address set to that of the original address masked against the given subnet mask, e.g. 192.168.0.0 for a subnet mask 255.255.0.0. The subnetmask may be specified as an IPv4Subnetmask, a string e.g. 255.255.0.0 or an integer specifying the number of bits occupied by the mask.

Class: IPv4Subnetmask

This class represents an IPv4 subnet mask, typically defined by a single 32bit unsigned integer.

Property: value

Readonly. The 32bit unsigned integer that representst the mask.

Property: length

Readonly. The length of the subnet mask (the number of 1's in the binary representation).

Method: toString(use3Digits)

Returns the mask in octet format, e.g. 255.255.255.0. If use3Digits is true toString() returns all octets left padded with zeros, e.g. 255.255.255.000.

Method: toBin(separator)

Returns the mask in binary format, e.g. 11111111111111111111111100000000. If separator is set then its first character is used as a separator between the octets, e.g. 11111111 11111111 11111111 00000000 for a space character or 11111111.11111111.11111111.00000000 for a dot.

Method: toArray()

Returns the mask as an array, e.g. [ 192, 168, 1, 1 ].

Method: invert()

Returns a new Subnet mask with its mask set to be the inversion of the original mask.

Class: IPv4Range

This class represents a range typically used for iteration. It is also the base class for IPv4Subnetmask.

Property: firstAddress

Readonly. An IPv4Address representing the first address in the range.

Property: lastAddress

Readonly. An IPv4Address representing the last address in the range.

Property: length

Readonly. The number of addresses that exist in the range.

Method: contains(ip)

Returns true if the given ip address is inside the range. false otherwise. The ip address can be specified as an IPv4Address, a string or an array.

Method: getIterator()

Returns an ES6 Generator object to iterate over all addresses in the range. Used like so to list all hosts in the 192.168.1.0 subnet:

let iterator = range1.getIterator();
let item;
while(!(item = iterator.next()).done)
    console.log(item.value.toString());

Class: IPv4Subnet

This is an extention of IPv4Range with specific data to represent a subnet. All properties and methods from IPv4Range are available.

Property: subnetMask

Readonly. An IPv4Subnetmask that specifies the mask used for this subnet.

Property: networkAddress

Readonly. An IPv4Address that specifies the network address of the subnet. This is identical to firstAddress.

Property: broadcastAddress

Readonly. An IPv4Address that specifies the broadcast address of the subnet. This is identical to lastAddress.

Property: hosts

Readonly. The number of hosts present in the subnet. This is always equal to length - 2.

Method: getHostsIterator()

Similar to getIterator() except that this specific iterator skips the networkAddress and broadcastAddress to as only to iterate hosts.

Readme

Keywords

none

Package Sidebar

Install

npm i ip-addresses

Weekly Downloads

1

Version

1.0.0

License

ISC

Last publish

Collaborators

  • brugmanjoost