Skip to main content

Cidrize

IP address parsing for humans.

Cidrize takes IP address inputs that people tend to use in practice, validates them, and converts them to objects.

Intelligently parses IPv4/IPv6 addresses, CIDRs, ranges, and wildcard matches to attempt return a valid list of IP addresses.

The cidrize() function does all the work trying to parse IP addresses correctly.

Installation

You can install cidrize via Pip:

pip install cidrize

Dependencies

Cidrize is basically a thin veneer around netaddr to provide a human layer for parsing IP addresses.

Usage

Supported input formats

Input is very flexible and can be of any of the following formats:

192.0.2.18
192.0.20.64/26
192.0.2.80-192.0.2.85
192.0.2.170-175
192.0.2.8[0-5]
192.0.2.[5678]

Hyphenated ranges do not need to form a CIDR block but the starting number must be of lower value than the end. The netaddr module does most of the heavy lifting for us here.

Unsupported formats

Network mask (e.g. 192.0.2.0 255.255.255.0) and host mask (aka reverse mask, 192.0.2.0 0.0.0.255) notation are not accepted at this time.

The cidrize function returns a list of consolidated netaddr.IPNetwork objects. By default parsing exceptions will raise a CidrizeError (with default argument of raise_errors=True). You may pass raise_errors=False to cause exceptions to be stripped and the error text will be returned as a list. This is intended for use with scripts or APIs where receiving exceptions would not be preferred.

The module may also be run as a script for debugging purposes.

The cidrize function

Fire up your trusty old Python interpreter and follow along!

>>> from cidrize import cidrize

Old-fashioned CIDR

>>> cidrize("1.2.3.4")
[IPNetwork('1.2.3.4/32')]

Hyphenated range (default, strict=False)

>>> cidrize("2.4.6.8-2.4.6.80")
[IPNetwork('2.4.6.0/25')]

Hyphenated range strict (strict=True)

>>> cidrize("2.4.6.8-2.4.6.80", strict=True)
[IPNetwork('2.4.6.8/29'), IPNetwork('2.4.6.16/28'),
IPNetwork('2.4.6.32/27'), IPNetwork('2.4.6.64/28'),
IPNetwork('2.4.6.80/32')]

Wildcard

You may provide wildcards using asterisks. This is limited to the 4th and final octet only:

>>> cidrize("15.63.148.*")
[IPNetwork('15.63.148.0/24')]

Bracketed range

>>> cidrize("21.43.180.1[40-99]")
[IPNetwork('21.43.180.140/30'), IPNetwork('21.43.180.144/28'),
IPNetwork('21.43.180.160/27'), IPNetwork('21.43.180.192/29')]

Bad!

Bad CIDR prefixes are rejected outright:

>>> cidrize("1.2.3.38/40")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "cidrize.py", line 145, in cidrize
    raise CidrizeError(err)
cidrize.CidrizeError: CIDR prefix /40 out of range for IPv4!

Wack range?!

Ranges must always start from lower to upper bound, or this happens:

>>> cidrize("1.2.3.4-0")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "cidrize.py", line 145, in cidrize
    raise CidrizeError(err)
cidrize.CidrizeError: lower bound IP greater than upper bound!

Cidr Tool

The cidrize package also comes with the cidr command, which has two basic operations.

Simple output:

% cidr 1.2.3.4/30
1.2.3.4/30

Verbose output:

% cidr -v 1.2.3.4/30
Spanning CIDR:          1.2.3.4/30
Block Start/Network:    1.2.3.4
1st host:               1.2.3.5
Gateway:                1.2.3.6
Block End/Broadcast:    1.2.3.7
DQ Mask:                255.255.255.252
Cisco ACL Mask:         0.0.0.3
# of hosts:             2
Explicit CIDR blocks:   1.2.3.4/30

And that's that!

Contributing

This project uses conventional commits for automated versioning and changelog generation. Please format your commit messages accordingly:

  • fix: <description> - Patch release (bug fixes)
  • feat: <description> - Minor release (new features)
  • feat!: <description> or BREAKING CHANGE: - Major release (breaking changes)
  • docs:, chore:, ci:, test:, refactor:, perf:, build: - No release (housekeeping)

License

Cidrize is licensed under the BSD 3-Clause License. Please see LICENSE.md for the details.

Release files for cidrize 3.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cidrize 3.1.0
File Size Uploaded
cidrize-3.1.0.tar.gz 13.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cidrize 3.1.0
File Interpreter ABI Platform
cidrize-3.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 23.6 kB

Release files / cidrize-3.1.0.tar.gz

Download URL cidrize-3.1.0.tar.gz
Size 13.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c2e1b19b30471b294b9f1195620b497f090355bebbe2f5bc52c3574cfc0a1f30
BLAKE2b-256 checksum
How to use checksums
ee3310ce73a71d02ff9535321d87443852ab5d8777215ccefe6c6902d3471835
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 20, 2026.

Transparency log

Release files / cidrize-3.1.0-py3-none-any.whl

Download URL cidrize-3.1.0-py3-none-any.whl
Size 10.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fa1eaae736a8ea22bb095897c2bab339584a225440adfa2d0a46f4f3d4f4c862
BLAKE2b-256 checksum
How to use checksums
f9375b726d48636d8833424492ef2c16623e2b401986eabfe1a10abbc82a448b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 20, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.1.0 This release

2 release files

3.0.0

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.0

2 release files

0.6.4

1 release file

0.6.3

1 release file

0.6.2

1 release file

0.6.1

1 release file

0.6

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page