@@ -6,9 +6,9 @@ use futures::future::join_all;
66
77use pnet:: datalink:: { Channel , NetworkInterface } ;
88use pnet:: packet:: {
9+ MutablePacket , Packet ,
910 arp:: { ArpHardwareTypes , ArpOperations , ArpPacket , MutableArpPacket } ,
1011 ethernet:: { EtherTypes , MutableEthernetPacket } ,
11- MutablePacket , Packet ,
1212} ;
1313use pnet:: util:: MacAddr ;
1414use tokio:: sync:: Semaphore ;
@@ -20,7 +20,7 @@ use std::net::{IpAddr, Ipv4Addr};
2020use std:: string;
2121use std:: sync:: Arc ;
2222use std:: time:: { Duration , Instant } ;
23- use surge_ping:: { Client , Config , IcmpPacket , PingIdentifier , PingSequence , ICMP } ;
23+ use surge_ping:: { Client , Config , ICMP , IcmpPacket , PingIdentifier , PingSequence } ;
2424use 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 } ;
4240use mac_oui:: Oui ;
4341use rand:: random;
44- use tui_input:: backend:: crossterm:: EventHandler ;
42+ use ratatui:: crossterm:: event:: Event ;
43+ use ratatui:: crossterm:: event:: { KeyCode , KeyEvent } ;
4544use tui_input:: Input ;
45+ use tui_input:: backend:: crossterm:: EventHandler ;
4646
4747static POOL_SIZE : usize = 32 ;
4848static 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