Free IP Address List Cleaner
Validate and normalize IPv4/IPv6 lists locally. Group duplicates, filter address scopes, sort numerically and optionally normalize CIDRs or mapped addresses.
Loading tool…
How to use the ip address list cleaner
Validate and normalize IPv4/IPv6 lists locally. Group duplicates, filter address scopes, sort numerically and optionally normalize CIDRs or mapped addresses.
- Paste one IP per line or import a CSV column. Enable port stripping or CIDR entries only if those forms are present.
- Choose IPv4/IPv6 and scope filters, compressed or expanded IPv6, zone handling and mapped-address conversion.
- Select numeric, frequency or occurrence order and process locally with exact IP arithmetic.
- Review normalized addresses, practical scope labels and rejected entries, then copy or download the results.
Situations where a clean IP list matters
IP lists pile up from many places: firewall logs, server access logs, allowlist requests, spreadsheet exports and support tickets. Before you paste them into a firewall rule, a rate limiter or a report, you usually need one tidy entry per address, in a predictable order, with typos removed.
A security analyst might paste a few thousand addresses from a log export and keep only global format IPv4 entries. A network admin might merge two allowlists and want equivalent IPv6 spellings counted as one. A support lead might need a frequency view to see which address appears most often in a batch of complaints.
Because the work happens locally, the tool never pings, scans or looks up the addresses. It only reads the text you supply and applies exact number rules to it.
Worked example with the sample list
Load the sample, which contains 192.0.2.4 twice, 10.0.0.1, 1.1.1.1, 2001:0db8:0000:0000:0000:0000:0000:0001, 2001:db8::1, fe80::1%eth0 and 999.1.2.3. Keep duplicates grouped and choose Numeric IP order, then process the list.
The result has five rows. IPv4 comes first: 1.1.1.1 labeled Global format with a count of 1, 10.0.0.1 labeled Private with 1, and 192.0.2.4 labeled Documentation with 2. IPv6 follows: 2001:db8::1 labeled Documentation with a count of 2, because the long and short spellings are the same number, and fe80::1%eth0 labeled Link-local with 1. The entry 999.1.2.3 is rejected because an IPv4 octet cannot exceed 255.
How the cleaner decides what is equal
Each address is converted to its exact numeric value, 32 bits for IPv4 and 128 bits for IPv6, so comparison does not depend on how it was typed. IPv6 output uses the standard compressed form, where the longest run of zero groups becomes a double colon, unless you choose fully expanded output. The zone identifier and any CIDR prefix are part of the identity, so fe80::1%eth0 and fe80::1%eth1 stay separate unless you remove zones.
Scope labels come from a fixed table of special ranges, such as 10.0.0.0/8 and 192.168.0.0/16 for private IPv4, 127.0.0.0/8 for loopback, 100.64.0.0/10 for shared carrier-grade space, and 2001:db8::/32 for IPv6 documentation. Anything outside the table is labeled Global format, which is a syntax label and not a routing check.
With CIDR entries enabled, host bits are cleared to the network boundary, so 192.168.1.77/24 is output as 192.168.1.0/24, and the scope describes the first address of the range.
Common mistakes to avoid
Do not paste addresses with ports and forget the port option. Without it, an entry such as 203.0.113.9:8080 is rejected. IPv6 with a port must use brackets, for example [2001:db8::5]:443. Likewise, entries with a slash are rejected unless CIDR mode is on.
Watch out for leading zeros in IPv4. Some systems read 010 as octal, so the cleaner rejects such octets instead of guessing. Also keep each batch to 20,000 entries and 2,000,000 characters, and check the rejected list before you copy results into a production rule.
Useful tips and limitations
- Global-format classification does not prove public routing, ownership or current allocation.
- CIDR mode normalizes host bits to the network boundary; IPv4 leading-zero octets are rejected instead of guessed.
- Use the Result contains filter to pull one subnet, such as 10.20., out of a large mixed list without editing the source.
- Turn on the IPv4-mapped conversion when logs from dual-stack servers show addresses like ::ffff:198.51.100.7 that you want counted with plain IPv4 entries.
Common questions
Does the IP list cleaner query geolocation or scan hosts?
No. It performs local syntax, normalization, grouping and range calculations without making network requests to the addresses.
Can equivalent IPv6 spellings be deduplicated?
Yes. IPv6 addresses are compared by their numeric value, with zone and prefix handling controlled by your selected options.
Why is 100.64.0.5 not listed under Private?
That range is shared carrier-grade address space, a separate special-use block. It appears under the All special-use classifications filter rather than the Private filter.
Can I clean IP addresses from one column of a CSV file?
Yes. Import or paste CSV, pick the column number and optionally skip the header row. Only that column is read as IP input.
What happens to an IPv6 zone like %eth0?
It is kept and treated as part of the address by default. Turn on zone removal if you want fe80::1%eth0 and fe80::1 grouped together.
Text, local files and results are processed in your browser without AI or uploads. Listed domains, links, email addresses and IPs are not contacted. Save a local export before leaving.
