diff options
author | cyqsimon <28627918+cyqsimon@users.noreply.github.com> | 2023-10-12 19:40:23 +0800 |
---|---|---|
committer | cyqsimon <28627918+cyqsimon@users.noreply.github.com> | 2023-10-12 19:40:23 +0800 |
commit | 76956cfadefcebb7ae4ab136a6e727e2eee33d9e (patch) | |
tree | ca031fd85d95df36cb8fa9a94e2fbace98ca3b55 /src | |
parent | ea3e0d675f976cc776e3cb331b9d721f34858477 (diff) |
Handle IPv4-mapped IPv6 addresses when resolving connection owner
Diffstat (limited to 'src')
-rw-r--r-- | src/display/ui_state.rs | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/src/display/ui_state.rs b/src/display/ui_state.rs index 54ffbd1..179cba2 100644 --- a/src/display/ui_state.rs +++ b/src/display/ui_state.rs @@ -98,22 +98,31 @@ impl UIState { connections_to_procs: &'a HashMap<LocalSocket, String>, local_socket: &LocalSocket, ) -> Option<&'a String> { - let &LocalSocket { port, protocol, .. } = local_socket; - let name = connections_to_procs + // direct match .get(local_socket) + // IPv4-mapped IPv6 addresses + .or_else(|| { + let swapped: IpAddr = match local_socket.ip { + IpAddr::V4(v4) => v4.to_ipv6_mapped().into(), + IpAddr::V6(v6) => v6.to_ipv4_mapped()?.into(), + }; + connections_to_procs.get(&LocalSocket { + ip: swapped, + ..*local_socket + }) + }) + // address unspecified .or_else(|| { connections_to_procs.get(&LocalSocket { ip: Ipv4Addr::UNSPECIFIED.into(), - port, - protocol, + ..*local_socket }) }) .or_else(|| { connections_to_procs.get(&LocalSocket { ip: Ipv6Addr::UNSPECIFIED.into(), - port, - protocol, + ..*local_socket }) }); @@ -121,8 +130,9 @@ impl UIState { if name.is_none() && self.known_orphan_sockets.borrow_mut().insert(*local_socket) { match connections_to_procs .iter() - .find(|(socket, _)| socket.port == port && socket.protocol == protocol) - { + .find(|(&LocalSocket { port, protocol, .. }, _)| { + port == local_socket.port && protocol == local_socket.protocol + }) { Some((lookalike, name)) => { warn!( r#""{name}" owns a similar looking connection, but its local ip doesn't match."# |