mirror of
https://github.com/ktims/rs-aggregate.git
synced 2024-11-15 23:27:18 -08:00
Fix bare IP parsing
This commit is contained in:
parent
5345f7b1d2
commit
dd4cc163c2
@ -1,5 +1,5 @@
|
|||||||
# rs-aggregate
|
# rs-aggregate
|
||||||
rs-aggregate will compress an unsorted list of IP prefixes
|
rs-aggregate will aggregate an unsorted list of IP prefixes
|
||||||
|
|
||||||
Intended to be [aggregate6](https://github.com/job/aggregate6) with better performance.
|
Intended to be [aggregate6](https://github.com/job/aggregate6) with better performance.
|
||||||
|
|
||||||
|
19
src/main.rs
19
src/main.rs
@ -4,7 +4,7 @@ extern crate iprange;
|
|||||||
use clio::*;
|
use clio::*;
|
||||||
use ipnet::{IpNet, Ipv4Net, Ipv6Net};
|
use ipnet::{IpNet, Ipv4Net, Ipv6Net};
|
||||||
use iprange::IpRange;
|
use iprange::IpRange;
|
||||||
use std::io::BufRead;
|
use std::{io::BufRead, net::IpAddr};
|
||||||
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ fn simplify_input(mut input: Input) -> (IpBothRange, Errors) {
|
|||||||
};
|
};
|
||||||
let mut errors = Errors::new();
|
let mut errors = Errors::new();
|
||||||
for line in input.lock().lines() {
|
for line in input.lock().lines() {
|
||||||
for net in line.unwrap().split_whitespace() {
|
for net in line.unwrap().split_whitespace().to_owned() {
|
||||||
match net.parse() {
|
match net.parse() {
|
||||||
Ok(ipnet) => match ipnet {
|
Ok(ipnet) => match ipnet {
|
||||||
IpNet::V4(v4_net) => {
|
IpNet::V4(v4_net) => {
|
||||||
@ -46,6 +46,19 @@ fn simplify_input(mut input: Input) -> (IpBothRange, Errors) {
|
|||||||
()
|
()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Err(_) => {
|
||||||
|
// First try to add it as a bare IP
|
||||||
|
match net.parse() {
|
||||||
|
Ok(ip) => match ip {
|
||||||
|
IpAddr::V4(v4_ip) => {
|
||||||
|
res.v4.add(Ipv4Net::new(v4_ip, 32).unwrap());
|
||||||
|
()
|
||||||
|
}
|
||||||
|
IpAddr::V6(v6_ip) => {
|
||||||
|
res.v6.add(Ipv6Net::new(v6_ip, 128).unwrap());
|
||||||
|
()
|
||||||
|
}
|
||||||
|
},
|
||||||
Err(error) => {
|
Err(error) => {
|
||||||
eprintln!("ERROR: {} - {}, ignoring.", net, error.to_string());
|
eprintln!("ERROR: {} - {}, ignoring.", net, error.to_string());
|
||||||
errors.push(IpParseError {
|
errors.push(IpParseError {
|
||||||
@ -56,6 +69,8 @@ fn simplify_input(mut input: Input) -> (IpBothRange, Errors) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
res.v4.simplify();
|
res.v4.simplify();
|
||||||
res.v6.simplify();
|
res.v6.simplify();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user