16个版本

使用旧的Rust 2015

0.6.7 2022年1月17日
0.6.6 2021年11月7日
0.6.4 2021年5月18日
0.6.3 2020年5月13日
0.4.1 2017年11月2日

#126 in 网络编程

Download history 17717/week @ 2024-03-14 18900/week @ 2024-03-21 15169/week @ 2024-03-28 15728/week @ 2024-04-04 17383/week @ 2024-04-11 16510/week @ 2024-04-18 16060/week @ 2024-04-25 15656/week @ 2024-05-02 16723/week @ 2024-05-09 18780/week @ 2024-05-16 15918/week @ 2024-05-23 16024/week @ 2024-05-30 16248/week @ 2024-06-06 18598/week @ 2024-06-13 18021/week @ 2024-06-20 12985/week @ 2024-06-27

68,425 每月下载量
用于 21 个Crates (9 个直接)

MIT 许可证

62KB
1.5K SLoC

iprange-rs

Crates Version CI

iprange-rs 是一个用于管理IP范围的Rust库。

它提供快速添加和删除操作。

它还提供 mergeintersectexclude 方法,使您能够像操作集合一样操作它。

当然,您可以测试IP地址是否在 IpRange 中。

有关详细信息,请参阅 文档

示例

extern crate iprange;
extern crate ipnet;

use std::net::Ipv4Addr;
use iprange::IpRange;
use ipnet::Ipv4Net;

fn main() {
    let ip_range: IpRange<Ipv4Net> = ["10.0.0.0/8", "172.16.0.0/16", "192.168.1.0/24"]
        .iter()
        .map(|s| s.parse().unwrap())
        .collect();

    assert!(ip_range.contains(&"172.16.32.1".parse::<Ipv4Addr>().unwrap()));
    assert!(ip_range.contains(&"192.168.1.1".parse::<Ipv4Addr>().unwrap()));
}

Serde支持

Serde支持是可选的,默认禁用。要启用,请使用特性 serde

[dependencies]
iprange = { version = "0.6", features = ["serde"] }

基准测试

iprange-rs 将IP网络存储在基数查找树中。这使我们能够快速存储和查找IP信息。

没有Rust的替代品,所以我决定将其与用Go编写的那些进行比较。

在我的计算机上,以下是 基准测试结果(Go实现)

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

以下是使用 iprange-rs 的等效Rust程序的结果

test test_ipv4_against_go             ... bench:         751 ns/iter (+/- 5)
test test_ipv6_against_go             ... bench:       2,500 ns/iter (+/- 20)

我们可以看到,使用 iprange-rs 的Rust版本在处理IPv4时甚至比最快的Go实现快2.4倍,在IPv6时快1.2倍。

许可证

iprange-rs 使用MIT许可证。

依赖关系

~105–295KB