E. Almqvist 2 years ago
parent 081fa67232
commit ac51f7c46a
  1. 64
      src/scanner.rs

@ -1,10 +1,10 @@
use crate::ipv4; use crate::ipv4;
use anyhow::Result; use anyhow::Result;
use log::info; use log::info;
use std::thread; //use std::thread;
use std::{ use std::{
net::{SocketAddr, TcpStream}, net::{SocketAddr, TcpStream},
thread::JoinHandle, //thread::JoinHandle,
}; };
fn tcp_scan(dest: &SocketAddr) -> bool { fn tcp_scan(dest: &SocketAddr) -> bool {
@ -15,33 +15,51 @@ fn tcp_scan(dest: &SocketAddr) -> bool {
false false
} }
pub fn scan(target: &ipv4::IPv4) -> bool { // TODO: do thread optimization
true
}
// pub fn scan(target: &ipv4::IPv4) -> bool {
// true
// }
//
// fn create_scan_thread(ip_list: Vec<ipv4::IPv4>, thread_id: u32, ips_per_thread: u32, results_list: &Vec<bool>) -> JoinHandle<Vec<bool>> {
// thread::spawn(move || {
// let results: Vec<bool> = Vec::new();
// // do the scan thing
// for i in 0..ips_per_thread {
// let id = (thread_id * ips_per_thread) + i;
// let ref target = ip_list[id as usize];
// let result = scan(&target);
// }
//
// results
// })
// }
//
pub fn start_scan(target_port: u16, num_threads: u32, ignorelist: Option<Vec<u64>>) -> Result<()> { pub fn start_scan(target_port: u16, num_threads: u32, ignorelist: Option<Vec<u64>>) -> Result<()> {
let ip_list = ipv4::get_all(ignorelist)?; let ip_list = ipv4::get_all(ignorelist)?;
// casting hell // casting hell
let ips_per_thread = ((ip_list.len() as f32) / num_threads as f32) as u32; // let ips_per_thread = ((ip_list.len() as f32) / num_threads as f32) as u32;
let ips_left = num_threads * ips_per_thread; // how many IPs we have left after the first threads // let ips_left = num_threads * ips_per_thread; // how many IPs we have left after the first threads
//
// Container for all of our threads // // Container for all of our threads
let mut threads: Vec<JoinHandle<()>> = Vec::new(); // let mut threads: Vec<JoinHandle<()>> = Vec::new();
//
// Create all of our threads // // Create all of our threads
for thread_id in 0..num_threads { // for thread_id in 0..num_threads {
threads.push( // threads.push( create_scan_thread(ip_list.borrow().clone(), thread_id, ips_per_thread) );
thread::spawn(move || { // }
// do the scan thing //
for i in 0..ips_per_thread { // // Create the last thread to do the job
let id = (thread_id * ips_per_thread) + i;
let ref target = ip_list[id as usize]; let mut results: Vec<bool> = Vec::new();
let result = scan(&target);
} ip_list.iter().for_each(|ip| {
}) if !ip.ignore {
); let target = ip.to_socketaddr(target_port).unwrap();
results.push(tcp_scan(&target));
} }
});
Ok(()) Ok(())
} }

Loading…
Cancel
Save