UNPKG

@corvina/cidr

Version:

CIDR Operation helper

72 lines 2.15 kB
import { cidr, ip } from './cidr'; export function validateIpAddressForEndpoint(value) { if (!value) { throw new Error('Invalid'); } let [address, mask] = value.split('/'); if (!mask) { const err = ip.validate(address); if (err) { throw new Error(err); } return value; } else { if (mask.includes('.')) { const err = ip.validate(mask); if (err) { throw new Error(err); } mask = convertNetmaskToBitmask(mask).toString(); value = `${address}/${mask}`; } value = `${cidr.min(value)}/${mask}`; const err = cidr.validate(value); if (err) { throw new Error(err); } return value; } } export function convertNetworkAddressWithBitmaskToNetmask(value) { if (value.includes('/')) { let [address, mask] = value.split('/'); if (!mask) { return value; } if (!mask.includes('.')) { mask = convertBitmaskToNetmask(parseInt(mask)).toString(); value = `${address}/${mask}`; return value; } } return value; } export function convertBitmaskToNetmask(bitCount) { var mask = [], i, n; for (i = 0; i < 4; i++) { n = Math.min(bitCount, 8); mask.push(256 - Math.pow(2, 8 - n)); bitCount -= n; } return mask.join('.'); } export function convertNetmaskToBitmask(netmask) { const netmaskOctets = netmask.split('.'); const netmaskBits = netmaskOctets.map((octet) => parseInt(octet, 10).toString(2)); const bitmask = netmaskBits .join('') .split('') .filter((bit) => bit === '1').length; return bitmask; } export function anonymizeIp(ipAddress, maskLength) { const binaryAddress = ip.toBinary(ipAddress); const anonymizedBinaryAddress = binaryAddress .replace(/\./g, '') .slice(0, maskLength) .padEnd(32, '0') .replace(/(.{8})(?=.)/g, '$1.'); return ip.binaryToIpString(anonymizedBinaryAddress); } //# sourceMappingURL=endpoint.js.map