Comment vérifier une connexion réseau?

Quelle est la meilleure façon de déterminer si une connexion réseau est disponible?

La réponse marquée est 100% correcte, cependant, il y a certains cas où la méthode standard est trompée par des cartes virtuelles (boîte virtuelle, …). Il est également souvent souhaitable de supprimer certaines interfaces réseau en fonction de leur vitesse (ports série, modems, …).

Voici un morceau de code qui vérifie ces cas:

  ///  /// 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", SsortingngComparison.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", SsortingngComparison.OrdinalIgnoreCase)) continue; return true; } return false; } 

Microsoft Windows Vista et 7 utilisent la technique NCSI (Network Connectivity Status Indicator):

  1. NCSI effectue une recherche DNS sur http://www.msftncsi.com, puis demande http://www.msftncsi.com/ncsi.txt . Ce fichier est un fichier en texte brut et contient uniquement le texte ” Microsoft NCSI “.
  2. NCSI envoie une demande de recherche DNS pour dns.msftncsi.com. Cette adresse DNS doit se résoudre à 131.107.255.255. Si l’adresse ne correspond pas, il est supposé que la connexion Internet ne fonctionne pas correctement.

Appelez cette méthode pour vérifier la connexion réseau.

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

Mettez cette ligne de code ci-dessous.

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