UNPKG

is-private-host

Version:

Check if a hostname or URL resolves to a private IP address

26 lines (22 loc) 803 B
import {parse as parseIP, parseCIDR} from 'ipaddr.js' import {privateRanges} from './privateRanges.js' /** * Checks if an IP address falls within a private/reserved range. * * @param ipAddress - The IP address to check. Can be either IPv4 or IPv6. * @returns True if the IP address is private/reserved, false otherwise. * @public */ export function isPrivateIP(ipAddress: string): boolean { try { const parsedIP = parseIP(ipAddress) // Check if the IP is within any of the defined private ranges const ranges = parsedIP.kind() === 'ipv4' ? privateRanges.ipv4 : privateRanges.ipv6 return ranges.some((range) => { const subnet = parseCIDR(range) return parsedIP.match(subnet) }) } catch (error) { throw new Error(`Invalid IP address "${ipAddress}"`) } }