FREE TOOL

IPv4 subnet overlap checker

Paste a list of IPv4 prefixes or address ranges, one per line. The checker compares every pair and labels each overlap as a duplicate, a containment or a partial overlap, with the addresses the two entries share. Add an address to see which entries hold it. The check runs in this page, and the page does not send what you enter to a server. No account is required.

Prefixes, ranges and an address

This checker runs in your browser and needs JavaScript turned on. The boxes stay locked until the page script loads, so the page cannot send anything you enter. If they stay locked, the script did not load. Turn on JavaScript or reload the page to use the checker.

One entry per line: a prefix such as 10.20.1.0/24 or 10.20.1.0 255.255.255.0, a range such as 10.20.3.200-10.20.4.20, or a single address, which counts as a /32. Blank lines are skipped. You can list up to 64 entries.

For example 10.20.1.77. The result lists every entry that holds it.

How the checker compares two entries

Every entry is reduced to its first and last address. A prefix runs from its network address, with every host bit 0, to its last address, with every host bit 1. A range already states both ends. Two entries overlap when each one starts no later than the other one ends. If one entry starts after the other has ended, they share no address and the checker does not list the pair.

An overlapping pair is labeled in one of three ways. A duplicate covers exactly the same addresses as an earlier entry, even if it is written differently, such as 10.20.1.0/24 and 10.20.1.0-10.20.1.255. A containment means one entry holds every address of the other and more. A partial overlap means the two share some addresses and each also has addresses the other does not.

Why two prefixes never overlap partially

A prefix holds a power-of-two number of addresses and starts on a multiple of that number. Take two prefixes of different sizes. The larger size is a multiple of the smaller one, so the larger prefix is made of whole blocks of the smaller size, and the smaller prefix is either one of those blocks or lies entirely outside the larger prefix. Two prefixes therefore either share no address, are the same, or one contains the other. A partial overlap needs at least one range, such as a DHCP pool written as two addresses that does not start or end on a prefix boundary.

To practice, decide on paper how 10.20.0.0/22 relates to 10.20.1.0/24, and how 10.20.0.0/22 relates to the range 10.20.3.200-10.20.4.20. Then paste the three entries here and compare your answers with the table.

How duplicates are handled

When an entry covers the same addresses as an earlier one, the checker reports it once, as a duplicate of the earlier line, and leaves it out of every other comparison. Comparing it again would only repeat the findings for the first copy. A duplicate still counts as an entry, and the address test still reports it on its own line. A prefix written with host bits set, such as 10.20.1.5/24, is read as its network, 10.20.1.0/24, and the result says so.

Why this checker has no share link

Every result on this page depends on the whole list you pasted. The overlaps are between its entries, and the address test reports which of them hold the address. A link with only the address in it would reproduce nothing, and this checker does not put the list in a link. So it has no share link, and it never writes your list or your address to the page's URL. Use Copy results to keep a record of a check.

What this checker does not do

The checker compares IPv4 addresses only, as numbers. It does not know what an entry is used for, so it cannot say whether an overlap is a mistake: a route for 10.20.0.0/22 that contains a route for 10.20.1.0/24 is normal, while two DHCP pools that overlap are not. It does not check IPv6 and does not flag special-purpose ranges. The working shows the first 6 overlapping pairs and the first 4 entries of an address test step by step, and the tables list every result.

Sources: RFC 4632, section 3.1, for prefixes as power-of-two blocks.