npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

netrangex

v1.0.1

Published

A professional IP pool generator for calculating network information from IP addresses and subnet masks

Readme

Network IP Pool Generator (netrangex)

A professional Node.js package for calculating comprehensive network information from IP addresses and subnet masks. This utility generates detailed IP pool data, validates network parameters, and provides network classification capabilities.

Features

Core Features:

  • Calculate network information from IP address and CIDR subnet notation
  • Generate usable IP range from network calculations
  • Validate IP addresses and subnet masks
  • Classify IP addresses as private or public
  • Identify network types and IP classes
  • Support for all CIDR notation (8-32)
  • Comprehensive error handling
  • Lightweight with no external dependencies (except prompt-sync for CLI)

Installation

npm install netrangex

Or add to your project:

npm install --save netrangex

Requirements

  • Node.js >= 12.0.0
  • npm or yarn

Quick Start

const { generateIP, isValidIP, isValidSubnet } = require('netrangex');

// Generate network information
const networkInfo = generateIP('192.168.0.1', 24);
console.log(networkInfo);

// Validate inputs
console.log(isValidIP('192.168.0.1'));        // true
console.log(isValidSubnet(24));               // true

API Reference

generateIP(ipAddress, subnet)

Main function that generates comprehensive IP pool and network information.

Parameters:

  • ipAddress (string): IP address in dotted decimal notation (e.g., '192.168.0.1')
  • subnet (number): CIDR subnet notation (8-32)

Returns: Object containing network information with the following properties:

{
  ip: string,                    // Original IP address
  subnet: number,                // CIDR subnet value
  numberOfIPs: number,           // Usable IP addresses (total - 2)
  networkIP: string,             // Network address
  subnetMask: string,            // Subnet mask in dotted notation
  usableStartIP: string,         // First usable IP address
  usableEndIP: string,           // Last usable IP address
  broadcastIP: string,           // Broadcast address
  rangeArr: array,               // Array of all usable IP addresses
  networkType: object,           // Network classification
  summary: object                // Summary of network information
}

Throws:

  • Error if IP address is invalid
  • Error if subnet value is outside valid range (8-32)

Example:

const { generateIP } = require('netrangex');

try {
  const result = generateIP('192.168.0.1', 24);
  console.log(JSON.stringify(result, null, 2));
  
  // Output:
  // {
  //   "ip": "192.168.0.1",
  //   "subnet": 24,
  //   "numberOfIPs": 254,
  //   "networkIP": "192.168.0.0",
  //   "subnetMask": "255.255.255.0",
  //   "usableStartIP": "192.168.0.1",
  //   "usableEndIP": "192.168.0.254",
  //   "broadcastIP": "192.168.0.255",
  //   "rangeArr": ["192.168.0.1", "192.168.0.2", ..., "192.168.0.254"],
  //   "networkType": {
  //     "type": "PRIVATE",
  //     "class": "Class C Private",
  //     "range": "192.168.0.0 - 192.168.255.255"
  //   },
  //   "summary": {
  //     "totalAddresses": 256,
  //     "usableAddresses": 254,
  //     "networkAddress": "192.168.0.0",
  //     "broadcastAddress": "192.168.0.255"
  //   }
  // }
} catch (error) {
  console.error('Error:', error.message);
}

isValidIP(ip)

Validates if the provided string is a valid IPv4 address.

Parameters:

  • ip (string): IP address to validate

Returns: boolean - true if valid IP address format, false otherwise

Example:

const { isValidIP } = require('netrangex');

console.log(isValidIP('192.168.0.1'));      // true
console.log(isValidIP('192.168.0.256'));    // false
console.log(isValidIP('999.999.999.999'));  // false
console.log(isValidIP('10.0.0.1'));         // true
console.log(isValidIP('192.168.0'));        // false (incomplete)
console.log(isValidIP('192.168.0.1.1'));    // false (too many octets)

isValidSubnet(subnet)

Validates if the provided value is a valid CIDR subnet notation.

Parameters:

  • subnet (number): Subnet value to validate

Returns: boolean - true if valid subnet (8-32), false otherwise

Example:

const { isValidSubnet } = require('netrangex');

console.log(isValidSubnet(24));    // true
console.log(isValidSubnet(16));    // true
console.log(isValidSubnet(8));     // true (minimum)
console.log(isValidSubnet(32));    // true (maximum - single host)
console.log(isValidSubnet(0));     // false (below minimum)
console.log(isValidSubnet(50));    // false (above maximum)
console.log(isValidSubnet(7));     // false (too small)

isPrivateIP(ip)

Checks if the provided IP address belongs to private/reserved address spaces.

Parameters:

  • ip (string): IP address to check

Returns: boolean - true if private/reserved IP, false if public

Private Ranges Detected:

  • 10.0.0.0 - 10.255.255.255 (Class A Private)
  • 172.16.0.0 - 172.31.255.255 (Class B Private)
  • 192.168.0.0 - 192.168.255.255 (Class C Private)
  • 127.0.0.0 - 127.255.255.255 (Loopback)
  • 169.254.0.0 - 169.254.255.255 (Link-local)

Example:

const { isPrivateIP } = require('netrangex');

console.log(isPrivateIP('192.168.0.1'));    // true (private)
console.log(isPrivateIP('10.0.0.1'));       // true (private)
console.log(isPrivateIP('172.20.0.1'));     // true (private)
console.log(isPrivateIP('127.0.0.1'));      // true (loopback)
console.log(isPrivateIP('169.254.1.1'));    // true (link-local)
console.log(isPrivateIP('8.8.8.8'));        // false (public)
console.log(isPrivateIP('1.1.1.1'));        // false (public)
console.log(isPrivateIP('208.67.222.123')); // false (public)

getNetworkType(ip)

Determines the network type and classification of an IP address.

Parameters:

  • ip (string): IP address to classify

Returns: Object containing network type information:

{
  type: string,        // 'PRIVATE' or 'PUBLIC'
  class: string,       // IP class (Class A, B, C, etc.)
  range: string        // Address range description
}

Example:

const { getNetworkType } = require('netrangex');

console.log(getNetworkType('192.168.0.1'));
// Output:
// {
//   type: 'PRIVATE',
//   class: 'Class C Private',
//   range: '192.168.0.0 - 192.168.255.255'
// }

console.log(getNetworkType('10.0.0.1'));
// Output:
// {
//   type: 'PRIVATE',
//   class: 'Class A Private',
//   range: '10.0.0.0 - 10.255.255.255'
// }

console.log(getNetworkType('8.8.8.8'));
// Output:
// {
//   type: 'PUBLIC',
//   class: 'Class A Public',
//   range: 'Internet Routable'
// }

console.log(getNetworkType('224.0.0.1'));
// Output:
// {
//   type: 'PUBLIC',
//   class: 'Class D (Multicast)',
//   range: 'Internet Routable'
// }

Usage Examples

Example 1: Class C Network

const { generateIP } = require('netrangex');

const result = generateIP('192.168.1.0', 24);
console.log(`Network: ${result.networkIP}/${result.subnet}`);
console.log(`Subnet Mask: ${result.subnetMask}`);
console.log(`Usable IPs: ${result.numberOfIPs}`);
console.log(`Range: ${result.usableStartIP} - ${result.usableEndIP}`);

// Output:
// Network: 192.168.1.0/24
// Subnet Mask: 255.255.255.0
// Usable IPs: 254
// Range: 192.168.1.1 - 192.168.1.254

Example 2: Larger RFC1918 Network

const { generateIP } = require('netrangex');

const result = generateIP('10.0.0.5', 16);
console.log(`Network: ${result.networkIP}/${result.subnet}`);
console.log(`Total IPs: ${result.summary.totalAddresses}`);
console.log(`Usable IPs: ${result.numberOfIPs}`);
console.log(`Broadcast: ${result.broadcastIP}`);

// Output:
// Network: 10.0.0.0/16
// Total IPs: 65536
// Usable IPs: 65534
// Broadcast: 10.255.255.255

Example 3: Single Host (/32)

const { generateIP } = require('netrangex');

const result = generateIP('192.168.0.100', 32);
console.log(`Network: ${result.networkIP}/${result.subnet}`);
console.log(`Subnet Mask: ${result.subnetMask}`);
console.log(`Type: ${result.networkType.class}`);

// Output:
// Network: 192.168.0.100/32
// Subnet Mask: 255.255.255.255
// Type: Class C Private

Example 4: Large Enterprise Network

const { generateIP } = require('netrangex');

const result = generateIP('172.16.0.1', 12);
console.log(`Network: ${result.networkIP}/${result.subnet}`);
console.log(`Subnet Mask: ${result.subnetMask}`);
console.log(`Usable Hosts: ${result.numberOfIPs.toLocaleString()}`);
console.log(`Range: ${result.usableStartIP} - ${result.usableEndIP}`);

// Output:
// Network: 172.16.0.0/12
// Subnet Mask: 255.240.0.0
// Usable Hosts: 1,048,574
// Range: 172.16.0.1 - 172.31.255.254

Example 5: Error Handling

const { generateIP, isValidIP, isValidSubnet } = require('netrangex');

// Check validation before processing
if (!isValidIP('999.999.999.999')) {
  console.log('Invalid IP address format');
}

if (!isValidSubnet(50)) {
  console.log('Subnet must be between 8 and 32');
}

// Or use try-catch with generateIP
try {
  const result = generateIP('192.168.0.1', 50);
} catch (error) {
  console.error('Error:', error.message);
  // Output: Error: Invalid subnet: 50. Expected value between 8 and 32
}

try {
  const result = generateIP('999.0.0.1', 24);
} catch (error) {
  console.error('Error:', error.message);
  // Output: Error: Invalid IP address: 999.0.0.1. Expected format: xxx.xxx.xxx.xxx
}

Example 6: IP Classification

const { isPrivateIP, getNetworkType } = require('netrangex');

const testIPs = [
  '192.168.1.1',
  '10.0.0.1',
  '8.8.8.8',
  '127.0.0.1',
  '172.20.0.1'
];

testIPs.forEach(ip => {
  const isPrivate = isPrivateIP(ip);
  const type = getNetworkType(ip);
  console.log(`${ip}: ${isPrivate ? 'Private' : 'Public'} - ${type.class}`);
});

// Output:
// 192.168.1.1: Private - Class C Private
// 10.0.0.1: Private - Class A Private
// 8.8.8.8: Public - Class A Public
// 127.0.0.1: Private - Loopback
// 172.20.0.1: Private - Class B Private

Running Examples

Run the included example file to see the package in action:

npm run example

This will execute example.js which demonstrates all the main functions with various network configurations.


Common CIDR Subnet Masks

| CIDR | Subnet Mask | Usable IPs | Class | |------|-----------------|-----------|----------| | /8 | 255.0.0.0 | 16,777,214| Large | | /12 | 255.240.0.0 | 1,048,574 | Large | | /16 | 255.255.0.0 | 65,534 | Medium | | /24 | 255.255.255.0 | 254 | Small | | /25 | 255.255.255.128 | 126 | Small | | /26 | 255.255.255.192 | 62 | Tiny | | /27 | 255.255.255.224 | 30 | Tiny | | /28 | 255.255.255.240 | 14 | Tiny | | /29 | 255.255.255.248 | 6 | Tiny | | /30 | 255.255.255.252 | 2 | Point-to-Point | | /32 | 255.255.255.255 | 1 | Host |


Real-World Use Cases

1. Network Planning

const { generateIP } = require('netrangex');

// Plan a new office network
const officeNetwork = generateIP('192.168.100.0', 24);
console.log(`Available IPs for office: ${officeNetwork.numberOfIPs}`);

2. IP Address Management

const { isPrivateIP } = require('netrangex');

// Filter private vs public IPs from a list
const ips = ['192.168.1.1', '8.8.8.8', '10.0.0.1'];
const privateIPs = ips.filter(ip => isPrivateIP(ip));

3. Network Validation

const { isValidIP, isValidSubnet } = require('netrangex');

// Validate user input before processing
function createNetwork(ip, subnet) {
  if (!isValidIP(ip)) return { error: 'Invalid IP' };
  if (!isValidSubnet(subnet)) return { error: 'Invalid Subnet' };
  // Process network...
}

Error Handling

The package provides comprehensive error messages:

const { generateIP } = require('netrangex');

// Invalid IP
try {
  generateIP('192.168.0.999', 24);
} catch (e) {
  console.error(e.message);
  // Invalid IP address: 192.168.0.999. Expected format: xxx.xxx.xxx.xxx
}

// Invalid Subnet
try {
  generateIP('192.168.0.1', 33);
} catch (e) {
  console.error(e.message);
  // Invalid subnet: 33. Expected value between 8 and 32
}

Performance Considerations

  • IP Range Generation: For large networks (/8, /9), the package limits range array generation to 100,000 IPs to prevent memory issues
  • Validation: Uses RegEx patterns for fast IP and subnet validation
  • Memory: Summary information is provided without storing full IP ranges for very large networks

License

MIT License - See LICENSE file for details


Author

Kalpesh Dongarkar


Repository


Contributing

Contributions are welcome! Please feel free to submit a Pull Request.


Related Resources


Changelog

Version 1.0.0

  • Initial release
  • Core IP pool generation functionality
  • IP validation
  • Network type classification
  • Private IP detection