Wie überprüfe ich nach einer Netzwerkverbindung?

Was ist der beste Weg festzustellen, ob eine Netzwerkverbindung verfügbar ist?

Sie können in .NET 2.0 mit GetIsNetworkAvailable() nach einer Netzwerkverbindung GetIsNetworkAvailable() :

 System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() 

Verwenden Sie die Ereignisse der NetworkChange- class, um Änderungen der IP-Adresse oder Änderungen der Netzwerkverfügbarkeit zu überwachen:

 System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged 

Die markierte Antwort ist 100% in Ordnung, es gibt jedoch Fälle, in denen die Standardmethode durch virtuelle Karten (virtuelle Box, …) getäuscht wird. Es ist auch oft wünschenswert, einige Netzwerkschnittstellen basierend auf ihrer Geschwindigkeit zu vercasting (serielle Ports, Modems, …).

Hier ist ein Code, der nach diesen Fällen sucht:

  ///  /// Indicates whether any network connection is available /// Filter connections below a specified speed, as well as virtual network cards. ///  ///  /// true if a network connection is available; otherwise, false. ///  public static bool IsNetworkAvailable() { return IsNetworkAvailable(0); } ///  /// Indicates whether any network connection is available. /// Filter connections below a specified speed, as well as virtual network cards. ///  /// The minimum speed required. Passing 0 will not filter connection using speed. ///  /// true if a network connection is available; otherwise, false. ///  public static bool IsNetworkAvailable(long minimumSpeed) { if (!NetworkInterface.GetIsNetworkAvailable()) return false; foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) { // discard because of standard reasons if ((ni.OperationalStatus != OperationalStatus.Up) || (ni.NetworkInterfaceType == NetworkInterfaceType.Loopback) || (ni.NetworkInterfaceType == NetworkInterfaceType.Tunnel)) continue; // this allow to filter modems, serial, etc. // I use 10000000 as a minimum speed for most cases if (ni.Speed < minimumSpeed) continue; // discard virtual cards (virtual box, virtual pc, etc.) if ((ni.Description.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0) || (ni.Name.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0)) continue; // discard "Microsoft Loopback Adapter", it will not show as NetworkInterfaceType.Loopback but as Ethernet Card. if (ni.Description.Equals("Microsoft Loopback Adapter", StringComparison.OrdinalIgnoreCase)) continue; return true; } return false; } 

Microsoft Windows Vista und 7 verwenden NCSI (Network Connectivity Status Indicator) Technik:

  1. NCSI führt eine DNS-Suche auf http://www.msftncsi.com durch und fordert dann http://www.msftncsi.com/ncsi.txt an . Diese Datei ist eine Nur-Text-Datei und enthält nur den Text ” Microsoft NCSI “.
  2. NCSI sendet eine DNS-Suchanforderung für dns.msftncsi.com. Diese DNS-Adresse sollte auf 131.107.255.255 aufgetriggers werden. Wenn die Adresse nicht übereinstimmt, wird angenommen, dass die Internetverbindung nicht korrekt funktioniert.

Rufen Sie diese Methode auf, um die Netzwerkverbindung zu überprüfen.

 public static bool IsConnectedToInternet() { bool returnValue = false; try { int Desc; returnValue = Utility.InternetGetConnectedState(out Desc, 0); } catch { returnValue = false; } return returnValue; } 

Setzen Sie dies unter die Codezeile.

 [DllImport("wininet.dll")] public extern static bool InternetGetConnectedState(out int Description, int ReservedValue);