subnet-check
Version:
Check if an IPv4 or IPv6 address is contained in the given CIDR subnet
99 lines • 3.5 kB
JavaScript
;
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