diff options
author | Kelvin Zhang <zhangxp1998@gmail.com> | 2020-01-07 15:08:16 -0500 |
---|---|---|
committer | Kelvin Zhang <zhangxp1998@gmail.com> | 2020-01-07 16:40:07 -0500 |
commit | 471fd861d5799b14f819e388246bf8a564ca98a6 (patch) | |
tree | ce1cd5086abbe2de5037270702c7057c769fd850 /src/os | |
parent | cf772acba35467b25ab59fef644199839882bc4a (diff) |
Address some comments on PR
Diffstat (limited to 'src/os')
-rw-r--r-- | src/os/linux.rs | 10 | ||||
-rw-r--r-- | src/os/lsof_utils.rs | 32 | ||||
-rw-r--r-- | src/os/macos.rs | 11 |
3 files changed, 25 insertions, 28 deletions
diff --git a/src/os/linux.rs b/src/os/linux.rs index 07b8b17..9ca566c 100644 --- a/src/os/linux.rs +++ b/src/os/linux.rs @@ -2,9 +2,10 @@ use ::std::collections::HashMap; use ::procfs::process::FDTarget; -use crate::network::{Connection, LocalSocket, Protocol}; +use crate::network::{Connection, Protocol}; +use crate::OpenSockets; -pub(crate) fn get_open_sockets() -> (HashMap<LocalSocket, String>, std::vec::Vec<Connection>) { +pub(crate) fn get_open_sockets() -> OpenSockets { let mut open_sockets = HashMap::new(); let mut connections = std::vec::Vec::new(); let all_procs = procfs::process::all_processes().unwrap(); @@ -46,5 +47,8 @@ pub(crate) fn get_open_sockets() -> (HashMap<LocalSocket, String>, std::vec::Vec connections.push(connection); }; } - (open_sockets, connections) + OpenSockets { + sockets_to_procs: open_sockets, + connections, + } } diff --git a/src/os/lsof_utils.rs b/src/os/lsof_utils.rs index 260c753..584acab 100644 --- a/src/os/lsof_utils.rs +++ b/src/os/lsof_utils.rs @@ -21,16 +21,6 @@ lazy_static! { static ref LISTEN_REGEX: Regex = Regex::new(r"(.*):(.*)").unwrap(); } -fn parse_ip_addr(ip: &str) -> IpAddr { - if let Ok(v4addr) = ip.parse() { - IpAddr::V4(v4addr) - } else if let Ok(v6addr) = ip.parse() { - IpAddr::V6(v6addr) - } else { - panic!("{} is not a valid IP address", ip) - } -} - fn get_null_addr(ip_type: &str) -> &str { if ip_type.contains('4') { "0.0.0.0" @@ -39,16 +29,12 @@ fn get_null_addr(ip_type: &str) -> &str { } } -#[allow(clippy::needless_return)] impl RawConnection { pub fn new(raw_line: &str) -> Option<RawConnection> { + // Example row + // com.apple 664 user 198u IPv4 0xeb179a6650592b8d 0t0 TCP 192.168.1.187:58535->1.2.3.4:443 (ESTABLISHED) let columns: Vec<&str> = raw_line.split_ascii_whitespace().collect(); if columns.len() < 9 { - println!( - "lsof's output string has {} columns, different than expected: {:#?}", - columns.len(), - columns - ); return None; } let process_name = columns[0].replace("\\x20", " "); @@ -71,6 +57,10 @@ impl RawConnection { // let connection_state = columns[9]; // If this socket is in a "connected" state if let Some(caps) = CONNECTION_REGEX.captures(connection_str) { + // Example + // 192.168.1.187:64230->0.1.2.3:5228 + // *:* + // *:4567 let local_ip = String::from(caps.get(1).unwrap().as_str()); let local_port = String::from(caps.get(2).unwrap().as_str()); let remote_ip = String::from(caps.get(3).unwrap().as_str()); @@ -113,23 +103,23 @@ impl RawConnection { } pub fn get_protocol(&self) -> Protocol { - return Protocol::from_str(&self.protocol).unwrap(); + Protocol::from_str(&self.protocol).unwrap() } pub fn get_remote_ip(&self) -> IpAddr { - return parse_ip_addr(&self.remote_ip); + self.remote_ip.parse().unwrap() } pub fn get_remote_port(&self) -> u16 { - return self.remote_port.parse::<u16>().unwrap(); + self.remote_port.parse::<u16>().unwrap() } pub fn get_local_ip(&self) -> IpAddr { - return parse_ip_addr(&self.local_ip); + self.local_ip.parse().unwrap() } pub fn get_local_port(&self) -> u16 { - return self.local_port.parse::<u16>().unwrap(); + self.local_port.parse::<u16>().unwrap() } } diff --git a/src/os/macos.rs b/src/os/macos.rs index 2594330..68b4bad 100644 --- a/src/os/macos.rs +++ b/src/os/macos.rs @@ -1,6 +1,7 @@ use ::std::collections::HashMap; -use crate::network::{Connection, LocalSocket}; +use crate::network::Connection; +use crate::OpenSockets; use super::lsof_utils; use std::net::SocketAddr; @@ -14,8 +15,7 @@ struct RawConnection { process_name: String, } -#[allow(clippy::needless_return)] -pub(crate) fn get_open_sockets() -> (HashMap<LocalSocket, String>, std::vec::Vec<Connection>) { +pub(crate) fn get_open_sockets() -> OpenSockets { let mut open_sockets = HashMap::new(); let mut connections_vec = std::vec::Vec::new(); @@ -35,5 +35,8 @@ pub(crate) fn get_open_sockets() -> (HashMap<LocalSocket, String>, std::vec::Vec connections_vec.push(connection); } - return (open_sockets, connections_vec); + OpenSockets { + sockets_to_procs: open_sockets, + connections: connections_vec, + } } |