Iptools
This is a port of package iptools from Python with a lot of optimizations.
Key Features
- 100% safe Rust with
#![forbid(unsafe_code)] - Minimum dependencies
- Optimized for speed, with better performance than the
ipnetandipnetworkcrates and the standard library implementation (Benched on AArch64 and x86_64) - WebAssembly support (see WASM.md)
no_stdsupport with optional serde serialization forIpRange/IpVer
Which crate should I choose?
Recommendation: choose iptools when you need string-based APIs, reserved-block detection, WebAssembly builds, or when execution speed is a priority. Reach for ipnet if you need subnet aggregation, address arithmetic traits, or tighter integration with IpAddr. Use ipnetwork when you only require lightweight CIDR parsing/iteration and prefer its smaller, std-only API surface.
Getting Started
Add the following dependency to your Cargo manifest:
[]
= "0.4.1"
no_std support
To use iptools in a no_std environment, disable the default features:
[]
= { = "0.4.1", = false }
Example of usage
use ;
let first_range = match new ;
let second_range = match new ;
// Print range bounds (tuple: start, end)
println!;
// Use the IpRange as an iterator. Clone the range to iterate without consuming the original
let mut iter = first_range.clone;
println!; // Option<String>
// Print current length (total addresses in the range)
println!;
// Remaining addresses to iterate from a cloned iterator
let mut iter2 = first_range.clone;
println!;
iter2.next;
println!;
// Check whether an IP or CIDR is contained in the range
match first_range.contains
// Iterate over addresses (string iterator)
for ip in first_range.clone.take
IPv6 validation differences
The Rust port follows the canonical compression rules from
RFC 4291 ยง2.2.
That means non-conforming strings such as :::1 are rejected even though
Python iptools crate accepted them. You can see the
difference locally:
Reversed range bounds difference
The Rust port rejects reversed bounds when constructing ranges (e.g. "10.0.0.2", "10.0.0.1" returns an error). Python iptools normalizes and silently swaps those endpoints.
Supported Rust Versions
Rust 1.78.0+
License
This project is licensed under the MIT license.