CIDR (Classless Inter-Domain Routing, RFC 4632) is how networks write address ranges. The number after the slash is how many bits of the address are fixed; the rest can vary. For IPv4, with 32 bits in total:
| Prefix | Addresses | Typical use |
|---|---|---|
| /32 | 1 | One host, for example an allowlist entry |
| /24 | 256 | A common block size, and a common blocking unit |
| /16 | 65,536 | A large allocation |
For IPv6 a /64 is the standard size of a single subnet, often handed to one customer, and holds 2^64 addresses.
Why it matters for proxies
Autonomous systems announce their space as CIDR blocks, and websites often block or rate-limit by block rather than by single address. Ten proxies in the same /24 can fall together when one of them misbehaves, so when you test a provider, count distinct /24s as well as distinct IPs. CIDR also turns up in IP allowlists, firewall rules and NO_PROXY lists, though not every tool accepts a range where it accepts an address.
Check whether an IP is in a range
Python's standard library does the arithmetic:
import ipaddress
net = ipaddress.ip_network("203.0.113.0/24")
print(net.num_addresses) # 256
print(ipaddress.ip_address("203.0.113.77") in net) # True
print(ipaddress.ip_network("203.0.113.77/24", strict=False)) # 203.0.113.0/24
The last line is the quick way to find an address's /24 when you group a list of proxies by subnet.
Common confusion
A /24 is not 24 addresses, and a bigger prefix number means a smaller range. The addresses in these examples come from 203.0.113.0/24, a block reserved for documentation.