rscanner 0.5.0

Fast scan network by sending icmp, tcp, udp packets, inspired by nmap but doesn't depend on nmap
Documentation
use itertools::{iproduct, Product};
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
use std::sync::Arc;

pub struct SocketIterator<'s> {
    product_it: Product<Box<std::slice::Iter<'s, u16>>, Box<std::slice::Iter<'s, Ipv4Addr>>>,
}

impl<'s> SocketIterator<'s> {
    pub fn new(ips: &'s Arc<Vec<Ipv4Addr>>, ports: &'s Arc<Vec<u16>>) -> Self {
        let ports_it = Box::new(ports.iter());
        let ips_it = Box::new(ips.iter());
        Self {
            product_it: iproduct!(ports_it, ips_it),
        }
    }
}

impl<'s> Iterator for SocketIterator<'s> {
    type Item = SocketAddr;

    fn next(&mut self) -> Option<Self::Item> {
        self.product_it
            .next()
            .map(|(port, ip)| SocketAddr::new(IpAddr::V4(*ip), *port))
    }
}