Skip to content

Commit 302a91d

Browse files
committed
fix: correct detection of subnet mask
1 parent 1f7bdb9 commit 302a91d

1 file changed

Lines changed: 63 additions & 56 deletions

File tree

src/components/discovery.rs

Lines changed: 63 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ use futures::future::join_all;
66

77
use pnet::datalink::{Channel, NetworkInterface};
88
use pnet::packet::{
9+
MutablePacket, Packet,
910
arp::{ArpHardwareTypes, ArpOperations, ArpPacket, MutableArpPacket},
1011
ethernet::{EtherTypes, MutableEthernetPacket},
11-
MutablePacket, Packet,
1212
};
1313
use pnet::util::MacAddr;
1414
use tokio::sync::Semaphore;
@@ -20,7 +20,7 @@ use std::net::{IpAddr, Ipv4Addr};
2020
use std::string;
2121
use std::sync::Arc;
2222
use std::time::{Duration, Instant};
23-
use surge_ping::{Client, Config, IcmpPacket, PingIdentifier, PingSequence, ICMP};
23+
use surge_ping::{Client, Config, ICMP, IcmpPacket, PingIdentifier, PingSequence};
2424
use tokio::{
2525
sync::mpsc::{self, UnboundedSender},
2626
task::{self, JoinHandle},
@@ -37,12 +37,12 @@ use crate::{
3737
tui::Frame,
3838
utils::{count_ipv4_net_length, get_ips4_from_cidr},
3939
};
40-
use ratatui::crossterm::event::Event;
41-
use ratatui::crossterm::event::{KeyCode, KeyEvent};
4240
use mac_oui::Oui;
4341
use rand::random;
44-
use tui_input::backend::crossterm::EventHandler;
42+
use ratatui::crossterm::event::Event;
43+
use ratatui::crossterm::event::{KeyCode, KeyEvent};
4544
use tui_input::Input;
45+
use tui_input::backend::crossterm::EventHandler;
4646

4747
static POOL_SIZE: usize = 32;
4848
static INPUT_SIZE: usize = 30;
@@ -341,13 +341,11 @@ impl Discovery {
341341
}
342342

343343
fn set_active_subnet(&mut self, intf: &NetworkInterface) {
344-
let a_ip = intf.ips[0].ip().to_string();
345-
let ip: Vec<&str> = a_ip.split('.').collect();
346-
if ip.len() > 1 {
347-
let new_a_ip = format!("{}.{}.{}.0/24", ip[0], ip[1], ip[2]);
348-
self.input = Input::default().with_value(new_a_ip);
349-
350-
self.set_cidr(self.input.value().to_string(), false);
344+
let ipv4 = intf.ips.iter().find(|ip| ip.is_ipv4());
345+
if let Some(ip_network) = ipv4 {
346+
let cidr_str = format!("{}/{}", ip_network.network(), ip_network.prefix());
347+
self.input = Input::default().with_value(cidr_str.clone());
348+
self.set_cidr(cidr_str, false);
351349
}
352350
}
353351

@@ -385,11 +383,7 @@ impl Discovery {
385383
if !self.scanned_ips.is_empty() {
386384
s_ip_len = self.scanned_ips.len() - 1;
387385
}
388-
if index >= s_ip_len {
389-
0
390-
} else {
391-
index + 1
392-
}
386+
if index >= s_ip_len { 0 } else { index + 1 }
393387
}
394388
None => 0,
395389
};
@@ -455,22 +449,28 @@ impl Discovery {
455449
.block(
456450
Block::default()
457451
.title_top(Line::from("|Discovery|").yellow().right_aligned())
458-
.title_bottom(Line::from(vec![
459-
Span::styled("|", Style::default().fg(Color::Yellow)),
460-
Span::styled(
461-
"e",
462-
Style::default().add_modifier(Modifier::BOLD).fg(Color::Red),
463-
),
464-
Span::styled("xport data", Style::default().fg(Color::Yellow)),
465-
Span::styled("|", Style::default().fg(Color::Yellow)),
466-
]).left_aligned())
452+
.title_bottom(
453+
Line::from(vec![
454+
Span::styled("|", Style::default().fg(Color::Yellow)),
455+
Span::styled(
456+
"e",
457+
Style::default().add_modifier(Modifier::BOLD).fg(Color::Red),
458+
),
459+
Span::styled("xport data", Style::default().fg(Color::Yellow)),
460+
Span::styled("|", Style::default().fg(Color::Yellow)),
461+
])
462+
.left_aligned(),
463+
)
467464
.title_top(Line::from(scan_title).left_aligned())
468-
.title_bottom(Line::from(vec![
469-
Span::styled("|", Style::default().fg(Color::Yellow)),
470-
String::from(char::from_u32(0x25b2).unwrap_or('>')).red(),
471-
String::from(char::from_u32(0x25bc).unwrap_or('>')).red(),
472-
Span::styled("select|", Style::default().fg(Color::Yellow)),
473-
]).right_aligned())
465+
.title_bottom(
466+
Line::from(vec![
467+
Span::styled("|", Style::default().fg(Color::Yellow)),
468+
String::from(char::from_u32(0x25b2).unwrap_or('>')).red(),
469+
String::from(char::from_u32(0x25bc).unwrap_or('>')).red(),
470+
Span::styled("select|", Style::default().fg(Color::Yellow)),
471+
])
472+
.right_aligned(),
473+
)
474474
.border_style(Style::default().fg(Color::Rgb(100, 100, 100)))
475475
.borders(Borders::ALL)
476476
.border_type(DEFAULT_BORDER_STYLE),
@@ -501,29 +501,35 @@ impl Discovery {
501501
Mode::Normal => Style::default().fg(Color::Rgb(100, 100, 100)),
502502
})
503503
.border_type(DEFAULT_BORDER_STYLE)
504-
.title_bottom(Line::from(vec![
505-
Span::raw("|"),
506-
Span::styled(
507-
"i",
508-
Style::default().add_modifier(Modifier::BOLD).fg(Color::Red),
509-
),
510-
Span::styled("nput", Style::default().fg(Color::Yellow)),
511-
Span::raw("/"),
512-
Span::styled(
513-
"ESC",
514-
Style::default().add_modifier(Modifier::BOLD).fg(Color::Red),
515-
),
516-
Span::raw("|"),
517-
]).right_aligned())
518-
.title_bottom(Line::from(vec![
519-
Span::raw("|"),
520-
Span::styled(
521-
"s",
522-
Style::default().add_modifier(Modifier::BOLD).fg(Color::Red),
523-
),
524-
Span::styled("can", Style::default().fg(Color::Yellow)),
525-
Span::raw("|"),
526-
]).left_aligned()),
504+
.title_bottom(
505+
Line::from(vec![
506+
Span::raw("|"),
507+
Span::styled(
508+
"i",
509+
Style::default().add_modifier(Modifier::BOLD).fg(Color::Red),
510+
),
511+
Span::styled("nput", Style::default().fg(Color::Yellow)),
512+
Span::raw("/"),
513+
Span::styled(
514+
"ESC",
515+
Style::default().add_modifier(Modifier::BOLD).fg(Color::Red),
516+
),
517+
Span::raw("|"),
518+
])
519+
.right_aligned(),
520+
)
521+
.title_bottom(
522+
Line::from(vec![
523+
Span::raw("|"),
524+
Span::styled(
525+
"s",
526+
Style::default().add_modifier(Modifier::BOLD).fg(Color::Red),
527+
),
528+
Span::styled("can", Style::default().fg(Color::Yellow)),
529+
Span::raw("|"),
530+
])
531+
.left_aligned(),
532+
),
527533
);
528534
input
529535
}
@@ -583,7 +589,8 @@ impl Component for Discovery {
583589
Action::ModeChange(Mode::Normal)
584590
}
585591
_ => {
586-
self.input.handle_event(&ratatui::crossterm::event::Event::Key(key));
592+
self.input
593+
.handle_event(&ratatui::crossterm::event::Event::Key(key));
587594
return Ok(None);
588595
}
589596
},

0 commit comments

Comments
 (0)