From 932d556f169d28be94d3723e2d37ed1141af6eae Mon Sep 17 00:00:00 2001 From: zombyacoff Date: Sun, 22 Mar 2026 10:20:29 +0300 Subject: [PATCH] Improve detect_adapter --- src/network.rs | 49 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/src/network.rs b/src/network.rs index 065bf33..e90aa94 100644 --- a/src/network.rs +++ b/src/network.rs @@ -3,28 +3,51 @@ use std::process::Command; use std::time::{Duration, Instant}; pub fn detect_adapter() -> Option { + // TODO: Add a menu to let the user choose the network adapter manually + // instead of automatically picking one. + let script = r#" + $adapters = Get-NetAdapter | Where-Object Status -eq 'Up' + + $candidates = foreach ($adapter in $adapters) { + $config = Get-NetIPConfiguration -InterfaceIndex $adapter.ifIndex -ErrorAction SilentlyContinue + if ($config.IPv4DefaultGateway -or $config.IPv6DefaultGateway) { + $goodIpv4 = Get-NetIPAddress -InterfaceIndex $adapter.ifIndex -AddressFamily IPv4 -ErrorAction SilentlyContinue | + Where-Object { $_.IPAddress -notmatch '^169\.254\.' } | + Select-Object -First 1 + + [PSCustomObject]@{ + Adapter = $adapter + Score = if ($goodIpv4) { 2 } else { 1 } + } + } + } + + if ($candidates) { + ($candidates | Sort-Object Score -Descending | Select-Object -First 1).Adapter.Name + } else { + $adapters[0].Name + } + "#; + let output = Command::new("powershell") - .args([ - "-Command", - "(Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Select-Object -First 1).Name", - ]) + .args(["-Command", script]) .output() .ok()?; let name = String::from_utf8_lossy(&output.stdout).trim().to_string(); - if name.is_empty() { - None - } else { - Some(name) - } + if name.is_empty() { None } else { Some(name) } } pub fn get_current_dns() -> Option { + let script = r#" + Get-DnsClientServerAddress -AddressFamily IPv4 | + Where-Object { $_.ServerAddresses.Count -gt 0 } | + Select-Object -First 1 -ExpandProperty ServerAddresses | + Out-String + "#; + let output = Command::new("powershell") - .args([ - "-Command", - "Get-DnsClientServerAddress -AddressFamily IPv4 | Where-Object {$_.ServerAddresses.Count -gt 0} | Select-Object -First 1 -ExpandProperty ServerAddresses | Out-String", - ]) + .args(["-Command", script]) .output() .ok()?;