1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
/*! # CIDR Utils This crate provides data structures and functions to deal with IPv4 CIDRs and IPv6 CIDRs. ## Examples ```rust extern crate cidr_utils; use cidr_utils::cidr::IpCidr; assert_eq!(true, IpCidr::is_ip_cidr("192.168.1.0/24")); assert_eq!(true, IpCidr::is_ip_cidr("192.168.1.1/24")); assert_eq!(true, IpCidr::is_ip_cidr("192.168.1.0/0")); assert_eq!(false, IpCidr::is_ip_cidr("192.168.1.0/33")); assert_eq!(true, IpCidr::is_ip_cidr("192.168.1.0/255.255.255.0")); assert_eq!(true, IpCidr::is_ip_cidr("192.168.1.0/255.255.254.0")); assert_eq!(false, IpCidr::is_ip_cidr("192.168.1.0/255.255.255.1")); assert_eq!(true, IpCidr::is_ip_cidr("192.168.1.0")); // 192.168.1.0/32 assert_eq!(true, IpCidr::is_ip_cidr("192.168.1")); // 192.168.1/24 assert_eq!(true, IpCidr::is_ip_cidr("192.168")); // 192.168/16 assert_eq!(true, IpCidr::is_ip_cidr("192")); // 192/8 assert_eq!(true, IpCidr::is_ip_cidr("192/8")); assert_eq!(true, IpCidr::is_ip_cidr("192/255.0.0.0")); assert_eq!(false, IpCidr::is_ip_cidr("192/16")); assert_eq!(false, IpCidr::is_ip_cidr("192/255.255.0.0")); assert_eq!(true, IpCidr::is_ip_cidr("2001:4f8:3:ba::/64")); assert_eq!(true, IpCidr::is_ip_cidr("2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128")); assert_eq!(true, IpCidr::is_ip_cidr("::ffff:1.2.3.0/120")); assert_eq!(true, IpCidr::is_ip_cidr("::ffff:1.2.3.0/128")); assert_eq!(true, IpCidr::is_ip_cidr("2001:4f8:3:ba:2e0:81ff:fe22:d1f1")); // 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 assert_eq!(true, IpCidr::is_ip_cidr("2001:4f8:3:ba::")); // 2001:4f8:3:ba::/128 ``` ```rust extern crate cidr_utils; use std::net::IpAddr; use std::str::FromStr; use cidr_utils::cidr::IpCidr; let cidr = IpCidr::from_str("192.168.51.0/24").unwrap(); assert_eq!(true, cidr.contains(IpAddr::from_str("192.168.51.103").unwrap())); assert_eq!(false, cidr.contains(IpAddr::from_str("192.168.50.103").unwrap())); ``` ```rust extern crate cidr_utils; use std::net::Ipv4Addr; use cidr_utils::cidr::Ipv4Cidr; let cidr = Ipv4Cidr::from_str("192.168.51.0/24").unwrap(); assert_eq!(true, cidr.contains([192, 168, 51, 103])); assert_eq!(true, cidr.contains(Ipv4Addr::new(192, 168, 51, 103))); assert_eq!(false, cidr.contains([192, 168, 50, 103])); ``` ```rust extern crate cidr_utils; use cidr_utils::cidr::Ipv4Cidr; use cidr_utils::utils::Ipv4CidrCombiner; let mut combiner = Ipv4CidrCombiner::new(); combiner.push(Ipv4Cidr::from_str("192.168.51.100").unwrap()); assert_eq!(1, combiner.len()); assert_eq!("192.168.51.100/32".to_string(), combiner[0].to_string()); combiner.push(Ipv4Cidr::from_str("192.168.51.101").unwrap()); assert_eq!(1, combiner.len()); assert_eq!("192.168.51.100/31".to_string(), combiner[0].to_string()); combiner.push(Ipv4Cidr::from_str("192.168.51.102").unwrap()); assert_eq!(2, combiner.len()); assert_eq!("192.168.51.100/31".to_string(), combiner[0].to_string()); assert_eq!("192.168.51.102/32".to_string(), combiner[1].to_string()); combiner.push(Ipv4Cidr::from_str("192.168.51.103").unwrap()); assert_eq!(1, combiner.len()); assert_eq!("192.168.51.100/30".to_string(), combiner[0].to_string()); assert_eq!(true, combiner.contains([192, 168, 51, 102])); assert_eq!(false, combiner.contains([192, 168, 51, 105])); ``` */ #[macro_use] extern crate lazy_static; extern crate regex; /// This module provides data structures for IPv4 CIDRs and IPv6 CIDRs. pub mod cidr; /// This module provides data structures and functions for specific usage. pub mod utils;