iprange-rs
iprange-rs
is a Rust library for managing IP ranges.
It provides fast adding and removing operations.
It also provides merge
, intersect
and exclude
methods
that enable you to manipulate it like a set.
Of course, you can test whether an IP address is in an IpRange
.
See the documentation for details.
Example
extern crate iprange;
extern crate ipnet;
use Ipv4Addr;
use IpRange;
use Ipv4Net;
Benchmark
iprange-rs
stores the IP networks in a radix trie.
This allows us to store and lookup IP information quickly.
There is no Rust alternative to this crate, so I decide to compare it to those written in Go.
On my computer, here is the benchmark result for Go implementations:
BenchmarkIPv4Contains-8 500000 2545 ns/op
BenchmarkIPv4Contains_Radix-8 200000 6960 ns/op
BenchmarkIPv4Contains_NRadix-8 1000000 1828 ns/op
BenchmarkIPv6Contains-8 300000 3989 ns/op
BenchmarkIPv6Contains_Radix-8 200000 6818 ns/op
BenchmarkIPv6Contains_NRadix-8 500000 3039 ns/op
And below are the results of the equivalent Rust program using iprange-rs
:
test test_ipv4_against_go ... bench: 751 ns/iter (+/- 5)
test test_ipv6_against_go ... bench: 2,500 ns/iter (+/- 20)
We can see the Rust one using iprange-rs
is 2.4x faster than
even the fastest Go implementation when dealing with IPv4 and is 1.2x faster with IPv6.
License
iprange-rs
is licensed under the MIT license.