cidrContains(): boolean
Checks if a CIDR block contains an address.
Dispatches to cidrv4Contains or cidrv6Contains based on the
address type. Unlike cidrContainsCidr, a version mismatch does not
throw — an IPv6 address is not contained in an IPv4 CIDR block, and the
reverse, so both return false. The address usually arrives from the
network while the CIDR comes from configuration, which makes a mismatch
ordinary traffic on a dual-stack listener rather than a caller mistake.
IPv4-mapped IPv6 addresses are not converted here. parseAddress already
unwraps them, so an address from parseAddress matches an IPv4 CIDR; one from
parseAddressv6 stays a bigint and does not.
IPv4 and IPv6 containment
IPv4 and IPv6 containment
import { assert, assertEquals } from "@std/assert"; import { cidrContains, parseCidr } from "@hertzg/ip/cidr"; import { parseAddress } from "@hertzg/ip/address"; assert(cidrContains(parseCidr("10.0.0.0/8"), parseAddress("10.1.2.3").address)); assertEquals(cidrContains(parseCidr("10.0.0.0/8"), parseAddress("11.0.0.1").address), false); assert(cidrContains(parseCidr("2001:db8::/32"), parseAddress("2001:db8::1").address)); assertEquals(cidrContains(parseCidr("2001:db8::/32"), parseAddress("2001:db9::1").address), false);
Mixed versions return false instead of throwing
Mixed versions return false instead of throwing
import { assertEquals } from "@std/assert"; import { cidrContains, parseCidr } from "@hertzg/ip/cidr"; import { parseAddress } from "@hertzg/ip/address"; assertEquals(cidrContains(parseCidr("10.0.0.0/8"), parseAddress("2001:db8::1").address), false); assertEquals(cidrContains(parseCidr("::/0"), parseAddress("10.1.2.3").address), false);
IPv4-mapped IPv6 depends on which parser produced the address
IPv4-mapped IPv6 depends on which parser produced the address
import { assert, assertEquals } from "@std/assert"; import { cidrContains, parseCidr } from "@hertzg/ip/cidr"; import { parseAddress } from "@hertzg/ip/address"; import { parseAddressv6 } from "@hertzg/ip/addressv6"; assert(cidrContains(parseCidr("10.0.0.0/8"), parseAddress("::ffff:10.1.2.3").address)); assertEquals( cidrContains(parseCidr("10.0.0.0/8"), parseAddressv6("::ffff:10.1.2.3").address), false, );