IP Range Expander
Expand IPv4 ranges, wildcards or CIDR blocks into a paginated address list with subnet statistics.
IP Input Configuration
Formats accepted: 192.168.1.0/24, 10.0.0.5-25, or 172.16.*.*
Statistics (CIDR block)
| Network address | 192.168.1.0 |
| Broadcast address | 192.168.1.255 |
| Subnet mask | 255.255.255.0 |
| CIDR block | 192.168.1.0/24 |
| Total addresses | 256 |
| Usable hosts | 192.168.1.1 – 192.168.1.254 (254 hosts) |
Expanded IP Addresses
Expanding Subnets, Wildcards, and Ranges
This IP Range Expander lists every IPv4 address in a CIDR block (like /24 or /28), a wildcard whose stars fill the last octets (such as 192.168.1.*), or a range separated by a hyphen (e.g. 10.0.0.100 - 150). Addresses are read strictly: four decimal octets with no leading zeros, so a typo is reported instead of quietly becoming a different address, and a pattern such as 192.168.*.5, which is 256 separate addresses rather than a range, is refused.
For a block it shows the network and broadcast addresses, the mask and the usable hosts; for a range, its first and last address and the smallest block that encloses it. The list is paginated and exports as plain text, CSV with one address per row, or JSON, for up to 262,144 addresses (a /14).
Built and maintained by Meet Shah · Last updated
What this tool is used for
- Expanding a CIDR block into individual addresses for an allowlist.
- Producing a list for a tool that will not accept CIDR notation.
- Checking exactly how many addresses a block contains.
- Exporting a range as CSV or JSON for a spreadsheet.
- Confirming the first and last address of a block.
How it works in practice
A worked example
A firewall admin is handed a ticket that says to allow 192.168.1.77/29 on an appliance that only accepts single addresses, and needs the exact list to paste in.
192.168.1.77/29
Statistics (CIDR block) 192.168.1.77 is not the start of a /29: the block it falls in is 192.168.1.72/29, listed below. Check that this is the block you meant. Network address 192.168.1.72 Broadcast address 192.168.1.79 Subnet mask 255.255.255.248 CIDR block 192.168.1.72/29 Total addresses 8 Usable hosts 192.168.1.73 – 192.168.1.78 (6 hosts) Expanded IP Addresses 192.168.1.72 192.168.1.73 192.168.1.74 192.168.1.75 192.168.1.76 192.168.1.77 192.168.1.78 192.168.1.79
A /29 fixes the first 29 bits of the address and leaves the last three free, so the block holds eight addresses and the mask's final octet is 248. The tool clears those three free bits in the address you typed: 77 is 01001101 in binary, and zeroing the low three bits gives 01001000, which is 72. The block therefore runs from .72 to .79, with .72 as the network address and .79 as the broadcast address, leaving six assignable hosts. The copied list still carries all eight; the usable count only describes which of them a router would hand to a machine.
The edge case that catches people
The address in the ticket, .77, is not where the list starts, and the warning above the statistics exists for exactly this. Whoever wrote the ticket may have meant eight addresses starting at .77, which is .77 to .84 and not a /29 at all, and the page cannot tell which was intended. Python's ipaddress module goes further and refuses 192.168.1.77/29 outright under its default strict checking, because the address has host bits set. Read the warning back against the ticket before pasting anything.
When not to use this tool
Expanding a block only makes sense when the destination genuinely cannot take CIDR. Linux ipset hash:net sets, nftables interval sets and AWS security groups all accept 192.168.1.72/29 directly, and one prefix is easier to audit than eight lines. The page handles IPv4 only. To turn an arbitrary start-to-end range into the exact prefixes that cover it, use Python's ipaddress.summarize_address_range, which needs five prefixes for 10.0.0.5 to 10.0.0.25, rather than the single wider block reported here.
Frequently Asked Questions
- Which range notations does it accept?
- CIDR blocks,
start-endranges with a hyphen or an en dash, the shorthand192.168.1.10-20where only the last octet is given, wildcards such as192.168.1.*whose stars fill the last octets, and a single address. A star in the middle, as in192.168.*.5, is refused: it names 256 separate addresses, not a range. - What is the enclosing CIDR it reports?
- For a range, the smallest single block that contains it, shown as network/prefix: 192.168.1.200 to 192.168.2.10 sits in 192.168.0.0/22, found by XOR-ing the endpoints. It is usually larger than the range itself, so do not paste it into a firewall rule expecting an exact match.
- Why is there a limit on how many addresses it lists?
- Listing is capped at 262,144 addresses, exactly a /14. Only one page is drawn at a time, but every address is generated for filtering, copying and download, and beyond a /14 that work stalls the tab. The statistics are still computed for a block of any size.
- Does the expanded list include network and broadcast?
- Yes — it enumerates every address in the range, which is what you want for scanning or allow-listing. If you need only assignable hosts, drop the first and last entries for any prefix shorter than /31.
- Is a reversed range accepted?
- No. A range whose start is above its end is rejected rather than silently swapped, because the usual cause is a typo in one octet and quietly reordering it would hide the mistake behind a plausible-looking result.
- Can I get the output as CSV or JSON?
- Yes. CSV writes one address per row under an
ipheader, so it opens as a single column in a spreadsheet; JSON suits a script; and the plain list pastes into most firewall and scanner configuration files, which expect one address per line.
Common errors and gotchas
- Expanding a large block, where a /16 is 65,536 addresses and a /8 is millions.
- Including the network and broadcast addresses in a host list where they do not belong.
- Expanding an IPv6 block, which is almost never finite enough to enumerate.
- Pasting a very long list into a config that has a size limit.
- Assuming every address in the block is in use, which a scan would establish.