UNPKG

subnet-check

Version:

Check if an IPv4 or IPv6 address is contained in the given CIDR subnet

99 lines 3.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var IPv4 = require("./ipv4"); exports.IPv4 = IPv4; var IPv6 = require("./ipv6"); exports.IPv6 = IPv6; var net_1 = require("./net"); exports.isIPv4 = net_1.isIPv4; exports.isIPv6 = net_1.isIPv6; /** * Test if the given IP address is contained in the specified subnet. * @param address the IPv4 or IPv6 address to check * @param subnet the IPv4 or IPv6 CIDR to test (or an array of them) * @throws if the address or subnet are not valid IP addresses, or the CIDR prefix length * is not valid */ function isInSubnet(address, subnetOrSubnets) { if (!Array.isArray(subnetOrSubnets)) { return isInSubnet(address, [subnetOrSubnets]); } // for mapped IPv4 addresses, compare against both IPv6 and IPv4 subnets if (net_1.isIPv6(address) && IPv6.isIPv4MappedAddress(address)) { return (IPv6.isInSubnet(address, subnetOrSubnets.filter(function (subnet) { return net_1.isIPv6(subnet.split('/')[0]); })) || IPv4.isInSubnet(IPv6.extractMappedIpv4(address), subnetOrSubnets.filter(function (subnet) { return net_1.isIPv4(subnet.split('/')[0]); }))); } if (net_1.isIPv6(address)) { return IPv6.isInSubnet(address, subnetOrSubnets.filter(function (subnet) { return net_1.isIPv6(subnet.split('/')[0]); })); } else { return IPv4.isInSubnet(address, subnetOrSubnets.filter(function (subnet) { return net_1.isIPv4(subnet.split('/')[0]); })); } } exports.isInSubnet = isInSubnet; /** Test if the given IP address is a private/internal IP address. */ function isPrivate(address) { if (net_1.isIPv6(address)) { if (IPv6.isIPv4MappedAddress(address)) { return IPv4.isPrivate(IPv6.extractMappedIpv4(address)); } return IPv6.isPrivate(address); } else { return IPv4.isPrivate(address); } } exports.isPrivate = isPrivate; /** Test if the given IP address is a localhost address. */ function isLocalhost(address) { if (net_1.isIPv6(address)) { if (IPv6.isIPv4MappedAddress(address)) { return IPv4.isLocalhost(IPv6.extractMappedIpv4(address)); } return IPv6.isLocalhost(address); } else { return IPv4.isLocalhost(address); } } exports.isLocalhost = isLocalhost; /** Test if the given IP address is an IPv4 address mapped onto IPv6 */ function isIPv4MappedAddress(address) { if (net_1.isIPv6(address)) { return IPv6.isIPv4MappedAddress(address); } else { return false; } } exports.isIPv4MappedAddress = isIPv4MappedAddress; /** Test if the given IP address is in a known reserved range and not a normal host IP */ function isReserved(address) { if (net_1.isIPv6(address)) { if (IPv6.isIPv4MappedAddress(address)) { return IPv4.isReserved(IPv6.extractMappedIpv4(address)); } return IPv6.isReserved(address); } else { return IPv4.isReserved(address); } } exports.isReserved = isReserved; /** * Test if the given IP address is a special address of any kind (private, reserved, * localhost) */ function isSpecial(address) { if (net_1.isIPv6(address)) { if (IPv6.isIPv4MappedAddress(address)) { return IPv4.isSpecial(IPv6.extractMappedIpv4(address)); } return IPv6.isSpecial(address); } else { return IPv4.isSpecial(address); } } exports.isSpecial = isSpecial; //# sourceMappingURL=index.js.map