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

bitwise-operations.mddocs/

Bitwise Operations

Bitwise manipulation functions for IP addresses including NOT and OR operations with support for both IPv4 and IPv6 addresses and mixed-protocol operations.

Capabilities

Bitwise NOT Operation

not

Performs bitwise NOT (inversion) operation on an IP address, flipping all bits.

/**
 * Performs bitwise NOT operation on IP address
 * @param {string} addr - IP address to invert
 * @returns {string} Bitwise inverted IP address string
 */
function not(addr);

Usage Examples:

const ip = require('ip');

// IPv4 bitwise NOT
console.log(ip.not('255.255.255.0')); // '0.0.0.255'
console.log(ip.not('192.168.1.0')); // '63.87.254.255'
console.log(ip.not('0.0.0.0')); // '255.255.255.255'

// IPv6 bitwise NOT
console.log(ip.not('ffff::')); // '::ffff:ffff:ffff:ffff'
console.log(ip.not('::1')); // 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe'

// Practical use case: Convert subnet mask to wildcard mask
const subnetMask = '255.255.255.192';
const wildcardMask = ip.not(subnetMask);
console.log(wildcardMask); // '0.0.0.63'

Bitwise OR Operation

or

Performs bitwise OR operation between two IP addresses, supporting same-protocol and mixed IPv4/IPv6 operations.

/**
 * Performs bitwise OR operation on two IP addresses
 * @param {string} a - First IP address
 * @param {string} b - Second IP address
 * @returns {string} Result of bitwise OR operation
 */
function or(a, b);

Usage Examples:

const ip = require('ip');

// IPv4 bitwise OR
console.log(ip.or('192.168.1.0', '0.0.0.255')); // '192.168.1.255'
console.log(ip.or('10.0.0.0', '0.0.5.100')); // '10.0.5.100'
console.log(ip.or('255.255.255.0', '0.0.0.63')); // '255.255.255.63'

// IPv6 bitwise OR
console.log(ip.or('::ff', '::abcd:dcba:abcd:dcba')); 
// '::abcd:dcba:abcd:dcff'

console.log(ip.or('ffff::', '::1')); 
// 'ffff::1'

// Mixed IPv4/IPv6 operations
console.log(ip.or('0.0.0.255', '::abcd:dcba:abcd:dcba')); 
// '::abcd:dcba:abcd:dcff'

console.log(ip.or('192.168.1.100', '::ff')); 
// '::c0a8:16ff'

// Practical use case: Set specific bits in network address
const networkAddr = '192.168.1.0';
const hostBits = '0.0.0.100';
const fullAddress = ip.or(networkAddr, hostBits);
console.log(fullAddress); // '192.168.1.100'

Advanced Usage Patterns

Subnet Calculation with Bitwise Operations

const ip = require('ip');

// Calculate broadcast address using OR operation
const networkAddress = '192.168.1.128';  // /26 network
const subnetMask = '255.255.255.192';    // /26 mask
const wildcardMask = ip.not(subnetMask); // '0.0.0.63'
const broadcastAddress = ip.or(networkAddress, wildcardMask);
console.log(broadcastAddress); // '192.168.1.191'

// Verify against subnet function
const subnet = ip.subnet('192.168.1.128', subnetMask);
console.log(subnet.broadcastAddress); // '192.168.1.191' (matches)

Network Mask Manipulation

const ip = require('ip');

// Create custom network masks using bitwise operations
const baseMask = '255.255.0.0';     // /16
const additionalBits = '0.0.255.0'; // Additional /24 subnet bits
const combinedMask = ip.or(baseMask, additionalBits);
console.log(combinedMask); // '255.255.255.0' (/24)

// Invert masks for wildcard operations
const accessListMask = ip.not('255.255.255.240'); // /28 inverted
console.log(accessListMask); // '0.0.0.15' (wildcard for /28)

docs

address-conversion.md

address-validation.md

bitwise-operations.md

index.md

network-interfaces.md

network-operations.md

tile.json