From 7e289865b2691469ee96964b803830ed1d49d2e0 Mon Sep 17 00:00:00 2001 From: KKRainbow <443152178@qq.com> Date: Sun, 29 Mar 2026 19:26:29 +0800 Subject: [PATCH] fix(faketcp): avoid pnet interface lookup on windows (#2029) --- easytier/src/tunnel/fake_tcp/mod.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/easytier/src/tunnel/fake_tcp/mod.rs b/easytier/src/tunnel/fake_tcp/mod.rs index e4469459..4a8d0080 100644 --- a/easytier/src/tunnel/fake_tcp/mod.rs +++ b/easytier/src/tunnel/fake_tcp/mod.rs @@ -7,7 +7,7 @@ use std::sync::Arc; use std::{net::SocketAddr, pin::Pin}; use bytes::BytesMut; -use pnet::datalink; +use network_interface::NetworkInterfaceConfig; use pnet::util::MacAddr; use tokio::io::AsyncReadExt; use tokio::net::TcpStream; @@ -34,11 +34,18 @@ impl IpToIfNameCache { fn reload_ip_to_ifname(&self) { self.ip_to_ifname.clear(); - let interfaces = datalink::interfaces(); + let Ok(interfaces) = network_interface::NetworkInterface::show() else { + tracing::warn!("failed to enumerate interfaces when reloading faketcp ip cache"); + return; + }; for iface in interfaces { - for ip in iface.ips.iter() { - self.ip_to_ifname - .insert(ip.ip(), (iface.name.clone(), iface.mac)); + let mac = iface.mac_addr.as_deref().and_then(|mac| { + mac.parse::().map_err(|e| { + tracing::debug!(iface = %iface.name, mac, ?e, "failed to parse interface mac") + }).ok() + }); + for ip in iface.addr.iter() { + self.ip_to_ifname.insert(ip.ip(), (iface.name.clone(), mac)); } } }