diff --git a/Source/3rdparty/Dragablz b/Source/3rdparty/Dragablz index bb3801fbd3..c38f6d588d 160000 --- a/Source/3rdparty/Dragablz +++ b/Source/3rdparty/Dragablz @@ -1 +1 @@ -Subproject commit bb3801fbd33a979ed64b44b1945dbd9edca5c98d +Subproject commit c38f6d588dd4dabb6ab9e52029bf31b13171089b diff --git a/Source/NETworkManager/ViewModels/NetworkConnectionWidgetViewModel.cs b/Source/NETworkManager/ViewModels/NetworkConnectionWidgetViewModel.cs index 634a5b401e..afac966bef 100644 --- a/Source/NETworkManager/ViewModels/NetworkConnectionWidgetViewModel.cs +++ b/Source/NETworkManager/ViewModels/NetworkConnectionWidgetViewModel.cs @@ -10,6 +10,7 @@ using System.Windows.Input; using log4net; using NetworkInterface = NETworkManager.Models.Network.NetworkInterface; +using System.Net.Sockets; namespace NETworkManager.ViewModels; @@ -760,6 +761,14 @@ private Task CheckConnectionComputerAsync(CancellationToken ct) await NetworkInterface.DetectLocalIPAddressBasedOnRoutingAsync( IPAddress.Parse(SettingsManager.Current.Dashboard_PublicIPv4Address)); + if (detectedLocalIPv4Address == null) + { + Log.Debug("CheckConnectionComputerAsync - Local IPv4 address detection via routing failed, trying network interfaces..."); + + detectedLocalIPv4Address = await NetworkInterface.DetectLocalIPAddressFromNetworkInterfaceAsync( + AddressFamily.InterNetwork); + } + if (detectedLocalIPv4Address != null) { Log.Debug("CheckConnectionComputerAsync - Local IPv4 address detected: " + detectedLocalIPv4Address); @@ -787,6 +796,14 @@ await NetworkInterface.DetectLocalIPAddressBasedOnRoutingAsync( await NetworkInterface.DetectLocalIPAddressBasedOnRoutingAsync( IPAddress.Parse(SettingsManager.Current.Dashboard_PublicIPv6Address)); + if (detectedLocalIPv6Address == null) + { + Log.Debug("CheckConnectionComputerAsync - Local IPv6 address detection via routing failed, trying network interfaces..."); + + detectedLocalIPv6Address = await NetworkInterface.DetectLocalIPAddressFromNetworkInterfaceAsync( + AddressFamily.InterNetworkV6); + } + if (detectedLocalIPv6Address != null) { Log.Debug("CheckConnectionComputerAsync - Local IPv6 address detected: " + detectedLocalIPv6Address); @@ -896,6 +913,9 @@ private Task CheckConnectionRouterAsync(CancellationToken ct) await NetworkInterface.DetectLocalIPAddressBasedOnRoutingAsync( IPAddress.Parse(SettingsManager.Current.Dashboard_PublicIPv4Address)); + detectedLocalIPv4Address ??= await NetworkInterface.DetectLocalIPAddressFromNetworkInterfaceAsync( + AddressFamily.InterNetwork); + if (detectedLocalIPv4Address != null) { Log.Debug("CheckConnectionRouterAsync - Computer IPv4 address detected: " + detectedLocalIPv4Address); @@ -939,6 +959,9 @@ await NetworkInterface.DetectGatewayFromLocalIPAddressAsync( await NetworkInterface.DetectLocalIPAddressBasedOnRoutingAsync( IPAddress.Parse(SettingsManager.Current.Dashboard_PublicIPv6Address)); + detectedComputerIPv6 ??= await NetworkInterface.DetectLocalIPAddressFromNetworkInterfaceAsync( + AddressFamily.InterNetworkV6); + if (detectedComputerIPv6 != null) { Log.Debug("CheckConnectionRouterAsync - Computer IPv6 address detected: " + detectedComputerIPv6); diff --git a/Website/docs/changelog/next-release.md b/Website/docs/changelog/next-release.md index a0ea9553d6..db4f8873e5 100644 --- a/Website/docs/changelog/next-release.md +++ b/Website/docs/changelog/next-release.md @@ -56,6 +56,10 @@ Release date: **xx.xx.2025** - Settings format migrated from `XML` to `JSON`. The settings file will be automatically converted on first start after the update. [#3282](https://github.com/BornToBeRoot/NETworkManager/pull/3282) - Create a daily backup of the settings file before saving changes. Up to `10` backup files are kept in the `Backups` subfolder of the settings directory. [#3283](https://github.com/BornToBeRoot/NETworkManager/pull/3283) +**Dashboard** + +- Enhance local IP detection logic: If local IP cannot be determined via routing, now iterates over active network adapters and selects the first valid IPv4/IPv6 address (with link-local addresses (`169.254.x.x`, `fe80::..`) given lower priority). [#3296](https://github.com/BornToBeRoot/NETworkManager/pull/3296) + **IP Scanner** - Improved local subnet detection: If local IP cannot be determined via routing, now iterates over active network adapters and selects the first valid IPv4 address (with link-local addresses (`169.254.x.x`) given lower priority). [#3288](https://github.com/BornToBeRoot/NETworkManager/pull/3288)