diff --git a/agent/crates/public/src/enums.rs b/agent/crates/public/src/enums.rs index b78e07a5631..6c7cd5bfa7a 100644 --- a/agent/crates/public/src/enums.rs +++ b/agent/crates/public/src/enums.rs @@ -227,13 +227,18 @@ impl fmt::Display for CaptureNetworkType { pub enum IfType { Other = 1, Ethernet = 6, - TokenRing = 9, + TokenRing = 7, + Man = 9, Ppp = 23, Loopback = 24, Atm = 37, - Ieee80211 = 71, - Tunnel = 131, + Ieee80211 = 53, + Tunnel = 62, + Wwanpp = 71, + Tunnel2 = 131, Ieee1394 = 144, + Wman = 161, + Ieee802154 = 237, } #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)] diff --git a/agent/crates/public/src/utils/net/windows.rs b/agent/crates/public/src/utils/net/windows.rs index 258fda5acc4..7786474061c 100644 --- a/agent/crates/public/src/utils/net/windows.rs +++ b/agent/crates/public/src/utils/net/windows.rs @@ -127,6 +127,7 @@ pub fn neighbor_lookup(mut dest_addr: IpAddr) -> Result { pub fn get_interface_by_index(if_index: u32) -> Result { let adapters = get_pcap_interfaces()?; debug!("adapters: {:?}, if_index: {}", adapters.clone(), if_index); + println!("adapters: {:?}, if_index: {}", adapters.clone(), if_index); adapters .into_iter() .find(|link| link.if_index == if_index) @@ -257,6 +258,7 @@ pub fn route_get(dest_addr: IpAddr) -> Result { "failed to run GetBestInterfaceEx function with destination address={} because of win32 error code({}),\n{}", dest_addr, ret_code, WIN_ERROR_CODE_STR ); + println!("route get {:?}", err_msg); return Err(Error::Windows(err_msg)); } @@ -282,8 +284,13 @@ pub fn route_get(dest_addr: IpAddr) -> Result { "failed to run GetBestRoute2 function with destination address={} error: {}", dest_addr, err ); + println!("route get {:?}", err_msg); return Err(Error::Windows(err_msg)); } + println!( + "ooooooooooooooo {:?} {:?} {:?}", + best_if_index, route_row.InterfaceIndex, route_row.InterfaceLuid + ); // 解析 best_src_addr, gateway let (src_addr, gateway) = match dest_addr { @@ -326,6 +333,8 @@ fn get_pcap_interfaces() -> Result> { let devices = pcap::Device::list() .map_err(|e| Error::Windows(format!("list pcap interfaces failed: {}", e)))?; let adapters = get_adapters_addresses().map(|(adapters, _)| adapters)?; + println!("devices: {:?}", devices); + println!("adapters {:?}", adapters); let mut pcap_interfaces = vec![]; for device in devices { if let Some(link) = adapters @@ -398,6 +407,14 @@ pub fn get_adapters_addresses() -> Result<(Vec, Vec)> { while !adapter_ptr.is_null() { let adapter = adapter_ptr.as_ref().unwrap(); + println!( + "xxxxxxxxxxxxxxxxxxxxxx {:?} {:?} {:?} {:?} {:?}", + adapter.OperStatus, + adapter.AdapterName, + adapter.FriendlyName, + adapter.PhysicalAddress, + adapter.IfType + ); // 跳过status=down, adapter_name == null, friendly_name == null的interface if adapter.OperStatus != IfOperStatusUp || adapter.AdapterName.is_null() @@ -468,10 +485,14 @@ pub fn get_adapters_addresses() -> Result<(Vec, Vec)> { friendly_name, adapter_id, e )) })? { - IfType::Ethernet | IfType::TokenRing | IfType::Ieee80211 | IfType::Ieee1394 => { - flags |= LinkFlags::BROADCAST | LinkFlags::MULTICAST - } - IfType::Ppp | IfType::Tunnel => { + IfType::Ethernet + | IfType::TokenRing + | IfType::Ieee80211 + | IfType::Ieee1394 + | IfType::Ieee802154 + | IfType::Wman + | IfType::Man => flags |= LinkFlags::BROADCAST | LinkFlags::MULTICAST, + IfType::Ppp | IfType::Tunnel | IfType::Tunnel2 => { flags |= LinkFlags::POINT_TO_POINT | LinkFlags::MULTICAST } IfType::Loopback => flags |= LinkFlags::LOOPBACK | LinkFlags::MULTICAST, diff --git a/agent/src/utils/environment.rs b/agent/src/utils/environment.rs index c4d4fb5dfaa..76669bfb93f 100644 --- a/agent/src/utils/environment.rs +++ b/agent/src/utils/environment.rs @@ -378,7 +378,7 @@ pub fn get_ctrl_ip_and_mac(dest: &IpAddr) -> Result<(IpAddr, MacAddr)> { } // FIXME: Getting ctrl_ip and ctrl_mac sometimes fails, increase three retry opportunities to ensure access to ctrl_ip and ctrl_mac - for _ in 0..3 { + for i in 0..3 { let tuple = get_route_src_ip_and_mac(dest); if tuple.is_err() { warn!( @@ -389,6 +389,7 @@ pub fn get_ctrl_ip_and_mac(dest: &IpAddr) -> Result<(IpAddr, MacAddr)> { continue; } let (ip, mac) = tuple.unwrap(); + println!("xxxxxxxxxxxxxxxxxxxxxxxxx {:?} {:?} {:?}", i, ip, mac); let links = link_list(); if links.is_err() { warn!( @@ -402,6 +403,7 @@ pub fn get_ctrl_ip_and_mac(dest: &IpAddr) -> Result<(IpAddr, MacAddr)> { // use the public IP to check again to find the outgoing // interface of the default route. for link in links.unwrap().iter() { + println!("xxxxxxxxxxxxxx {:?}", link); if link.mac_addr == mac { if !link.flags.contains(LinkFlags::UP) { let dest = if dest.is_ipv4() {