UNPKG

@aikidosec/firewall

Version:

Zen by Aikido is an embedded Web Application Firewall that autonomously protects Node.js apps against common and critical attacks

48 lines (47 loc) 2.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isPrivateIP = isPrivateIP; const IPMatcher_1 = require("../../helpers/ip-matcher/IPMatcher"); const mapIPv4ToIPv6_1 = require("../../helpers/mapIPv4ToIPv6"); const PRIVATE_IP_RANGES = [ "0.0.0.0/8", // "This" network (RFC 1122) "10.0.0.0/8", // Private-Use Networks (RFC 1918) "100.64.0.0/10", // Shared Address Space (RFC 6598) "127.0.0.0/8", // Loopback (RFC 1122) "169.254.0.0/16", // Link Local (RFC 3927) "172.16.0.0/12", // Private-Use Networks (RFC 1918) "192.0.0.0/24", // IETF Protocol Assignments (RFC 5736) "192.0.2.0/24", // TEST-NET-1 (RFC 5737) "192.31.196.0/24", // AS112 Redirection Anycast (RFC 7535) "192.52.193.0/24", // Automatic Multicast Tunneling (RFC 7450) "192.88.99.0/24", // 6to4 Relay Anycast (RFC 3068) "192.168.0.0/16", // Private-Use Networks (RFC 1918) "192.175.48.0/24", // AS112 Redirection Anycast (RFC 7535) "198.18.0.0/15", // Network Interconnect Device Benchmark Testing (RFC 2544) "198.51.100.0/24", // TEST-NET-2 (RFC 5737) "203.0.113.0/24", // TEST-NET-3 (RFC 5737) "224.0.0.0/4", // Multicast (RFC 3171) "240.0.0.0/4", // Reserved for Future Use (RFC 1112) "255.255.255.255/32", // Limited Broadcast (RFC 919) ]; const PRIVATE_IPV6_RANGES = [ "::/128", // Unspecified address (RFC 4291) "::1/128", // Loopback address (RFC 4291) "fc00::/7", // Unique local address (ULA) (RFC 4193) "fe80::/10", // Link-local address (LLA) (RFC 4291) "100::/64", // Discard prefix (RFC 6666) "2001:db8::/32", // Documentation prefix (RFC 3849) "3fff::/20", // Documentation prefix (RFC 9637) ].concat( // Add the IPv4-mapped IPv6 addresses PRIVATE_IP_RANGES.map(mapIPv4ToIPv6_1.default)); const privateIp = new IPMatcher_1.IPMatcher(); PRIVATE_IP_RANGES.forEach((range) => { privateIp.add(range); }); PRIVATE_IPV6_RANGES.forEach((range) => { privateIp.add(range); }); function isPrivateIP(ip) { return privateIp.has(ip); }