#ip-address #subnet #net #iterator

subnetwork

Return all ip addresses of a subnetwork

40 releases

0.4.8 Nov 22, 2024
0.4.4 Aug 2, 2024
0.4.3 Jun 4, 2024
0.4.1 Dec 15, 2023
0.3.3 Jul 22, 2023

#1408 in Network programming

Download history 11/week @ 2024-08-26 4/week @ 2024-09-02 46/week @ 2024-09-09 44/week @ 2024-09-16 102/week @ 2024-09-23 137/week @ 2024-09-30 18/week @ 2024-10-07 33/week @ 2024-10-14 49/week @ 2024-10-21 158/week @ 2024-10-28 263/week @ 2024-11-04 28/week @ 2024-11-11 156/week @ 2024-11-18 97/week @ 2024-11-25 47/week @ 2024-12-02

345 downloads per month
Used in pistol

MIT license

32KB
725 lines

subnetwork

Returns an iterator that iterates over all subnet IPs.

Rust

Example 1

use std::net::Ipv4Addr;
use subnetwork::Ipv4Pool;

fn main() {
    let ipv4_pool = Ipv4Pool::from("192.168.1.0/24").unwrap();
    for i in ipv4_pool {
        println!("{:?}", i);
    }
    let ipv4 = Ipv4Addr::new(192, 168, 1, 1);
    let ret = ipv4_pool.contain(ipv4);
    assert_eq!(ret, true);
}

Example 2

use std::net::Ipv4Addr;
use subnetwork::CrossIpv4Pool;

fn main() {
    let start = Ipv4Addr::new(192, 168, 1, 1);
    let end = Ipv4Addr::new(192, 168, 3, 254);
    let ips = CrossIpv4Pool::new(start, end).unwrap();
    for i in ips {
        println!("{:?}", i);
    }
}

Benchmark

You can see how our performance compares to other similar libraries here.


lib.rs:

The subnetwork crate provides a set of APIs to work with IP CIDRs in Rust.

Dependencies

~255–700KB
~16K SLoC