@@ -17,8 +17,8 @@ use pnet::packet::vlan::{ClassOfService, MutableVlanPacket};
17
17
use rand:: prelude:: * ;
18
18
19
19
use crate :: args:: ScanOptions ;
20
- use crate :: vendor:: Vendor ;
21
20
use crate :: utils;
21
+ use crate :: vendor:: Vendor ;
22
22
use crate :: args:: ScanTiming ;
23
23
24
24
pub const DATALINK_RCV_TIMEOUT : u64 = 500 ;
@@ -69,18 +69,25 @@ pub struct TargetDetails {
69
69
* specific network on a network interfaces.
70
70
*/
71
71
pub fn compute_network_configuration < ' a > ( interfaces : & ' a [ NetworkInterface ] , scan_options : & ' a Arc < ScanOptions > ) -> ( & ' a NetworkInterface , Vec < & ' a IpNetwork > ) {
72
- let selected_interface = match ( & scan_options. interface_name , & scan_options. interface_index ) {
72
+
73
+ let mut interface_name = scan_options. interface_name . clone ( ) ;
74
+ if scan_options. interface_name . is_none ( ) && scan_options. interface_index . is_none ( ) {
75
+ let default_name = utils:: select_default_interface ( interfaces) . map ( |interface| interface. name ) ;
76
+ interface_name = default_name;
77
+ }
78
+
79
+ let selected_interface = match ( interface_name, & scan_options. interface_index ) {
73
80
( Some ( interface_name) , _) => {
74
- find_interface_by_name ( interfaces, interface_name)
81
+ find_interface_by_name ( interfaces, & interface_name)
75
82
} ,
76
83
( None , Some ( interface_index) ) => {
77
84
find_interface_by_index ( interfaces, * interface_index)
78
85
} ,
79
86
_ => {
80
- eprintln ! ( "Could not find a default network interface" ) ;
81
- eprintln ! ( "Use 'arp scan -l' to list available interfaces" ) ;
82
- process:: exit ( 1 ) ;
83
- }
87
+ eprintln ! ( "Could not find a default network interface" ) ;
88
+ eprintln ! ( "Use 'arp scan -l' to list available interfaces" ) ;
89
+ process:: exit ( 1 ) ;
90
+ }
84
91
} ;
85
92
86
93
let selected_interface = selected_interface. unwrap_or_else ( || {
@@ -97,12 +104,12 @@ pub fn compute_network_configuration<'a>(interfaces: &'a [NetworkInterface], sca
97
104
( selected_interface, ip_networks)
98
105
}
99
106
100
- fn find_interface_by_name < ' a > ( interfaces : & ' a [ NetworkInterface ] , interface_name : & str ) -> Option < & ' a NetworkInterface > {
107
+ fn find_interface_by_name < ' a > ( interfaces : & ' a [ NetworkInterface ] , interface_name : & String ) -> Option < & ' a NetworkInterface > {
101
108
interfaces. iter ( )
102
- . find ( |interface| interface. name == interface_name && ( cfg ! ( windows) || interface. is_up ( ) ) && !interface. is_loopback ( ) )
109
+ . find ( |interface| & interface. name == interface_name && ( cfg ! ( windows) || interface. is_up ( ) ) && !interface. is_loopback ( ) )
103
110
}
104
111
105
- fn find_interface_by_index < ' a > ( interfaces : & ' a [ NetworkInterface ] , interface_index : u32 ) -> Option < & ' a NetworkInterface > {
112
+ fn find_interface_by_index ( interfaces : & [ NetworkInterface ] , interface_index : u32 ) -> Option < & NetworkInterface > {
106
113
interfaces. iter ( )
107
114
. find ( |interface| interface. index == interface_index && ( cfg ! ( windows) || interface. is_up ( ) ) && !interface. is_loopback ( ) )
108
115
}
0 commit comments