Expand an IPv4 range or CIDR into the full list of addresses, with a live count. Useful for firewall rules and inventories.
Turn a range into a list. Give a start-end range (192.168.1.1-192.168.1.20) or a CIDR (10.0.0.0/28) and get every address in it, with a count. Very large ranges are capped for your browser's sake. Runs locally.
Invalid range or CIDR
–
Ranges above 10,000 addresses show only the first 10,000 plus a count.
Turning a range into a list
Two ways to describe the same span
A CIDR block and a start-end pair both describe a contiguous run of addresses, but they are not equally expressive. CIDR can only represent a block whose size is a power of two and whose base address is aligned to that size — 10.0.0.0/30 is legal, 10.0.0.1/30 describes the same block as 10.0.0.0/30 because the low bits get masked away. An arbitrary range like 192.168.0.254-192.168.1.2 cannot be written as a single CIDR at all; it takes three.
This tool accepts both forms and flattens either one to an explicit list. That is useful precisely when the consumer of the list does not speak CIDR: allowlists in older appliances, spreadsheet columns, shell loops, and quick sanity checks that a range covers what you think it covers.
Why the boundary cases matter
The common bug in hand-rolled expanders is treating the address as four independent numbers and incrementing only the last octet. That works until the range crosses a boundary, at which point 192.168.0.255 is followed by 192.168.0.256 instead of 192.168.1.0. Converting to a 32-bit integer, incrementing, and converting back makes the rollover automatic and is the only approach worth using.
The other trap is sign. In languages where bitwise operations produce signed 32-bit integers, 255.255.255.255 comes out as -1 unless you coerce it back to unsigned. Any address above 127.x.x.x is affected, so the bug hides in testing if you only try RFC 1918 ranges starting with 10 or 192.
Why the output is capped
A /8 contains 16.7 million addresses. Materialising that as text is roughly 250 MB, which will freeze the tab long before it finishes. The output here is capped and the true total is reported separately, so you can see the real size of the range without asking the browser to render it. If you genuinely need to iterate a very large block, do it as a stream on the server rather than as a list in a text box.
FAQ
What input formats are accepted?
Either CIDR notation such as 10.0.0.0/29, or an explicit start and end address separated by a dash or whitespace, for example 10.0.0.1 - 10.0.0.9.
Why is the output capped?
Listing an entire /8 would be over sixteen million lines and would freeze the tab. The cap keeps the page responsive while the count field still reports the true size of the range.
Does the list include the network and broadcast addresses?
Yes. The expander enumerates every address in the range literally, so you get the full block rather than only the usable host addresses.
Why was my range rejected?
Most often the end address is numerically lower than the start. The tool compares them as 32-bit integers, so 10.0.0.5 to 10.0.0.1 is not a valid range.
Can I paste the result into a firewall rule?
Yes, that is the usual reason to expand a range. Most tools accept a newline-separated list, although a CIDR block is more compact wherever it is supported.
Does the expansion handle octet rollover?
Yes. The arithmetic runs on the 32-bit integer, so a range that crosses from 10.0.0.255 to 10.0.1.0 continues correctly.