Obtenir une adresse IP locale en C#

Muhammad Maisam Abbas 16 février 2024
  1. Obtenir l’adresse IP locale avec la fonction Dns.GetHostEntry() en C#
  2. Obtenir l’adresse IP locale avec la propriété Socket.LocalEndPoint en C#
  3. Obtenir une adresse IP locale avec Linq en C#
  4. Obtenir une adresse IP locale avec la classe NetworkInterface en C#
Obtenir une adresse IP locale en C#

Dans ce tutoriel, nous discuterons des méthodes pour obtenir l’adresse IP locale de notre machine en C#.

Obtenir l’adresse IP locale avec la fonction Dns.GetHostEntry() en C#

La classe Dns récupère les informations relatives à un hôte sur Internet. Il existe de nombreuses méthodes dans la classe Dns pour les fonctionnalités liées au DNS en C#. La fonction Dns.GetHostEntry() est utilisée pour obtenir l’adresse IP d’un hôte.

L’exemple de code suivant nous montre comment nous pouvons obtenir l’adresse IP locale de notre machine avec la fonction Dns.GetHostEntry() en C#.

using System;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      String strHostName = string.Empty;
      IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());
      IPAddress[] addr = ipEntry.AddressList;

      for (int i = 0; i < addr.Length; i++) {
        Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString());
      }
    }
  }
}

Production:

IP Address 0 : fe80::1db8 : 23a7 : 6483 : 8976 % 20 IP Address 1 : 192.168.43.239

Dans le code ci-dessus, nous avons passé la fonction Dns.GetHostName() en paramètre de la fonction Dns.GetHostEntry() pour obtenir l’adresse IP de notre machine locale en C#. Le seul problème avec cette méthode est qu’elle nous donne toutes les adresses IP de la machine. Pour obtenir l’adresse IP spécifique, nous devons écrire le code suivant en C#.

using System;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      var host = Dns.GetHostEntry(Dns.GetHostName());
      foreach (var ip in host.AddressList) {
        if (ip.AddressFamily == AddressFamily.InterNetwork) {
          Console.WriteLine("IP Address = " + ip.ToString());
        }
      }
    }
  }
}

Production:

IP Address = 192.168.43.239

Dans le code ci-dessus, nous avons vérifié si ip.AddressFamily était égal à AddressFamily.InterNetwork. Cette condition vérifie si l’adresse IP dans la variable ip est une adresse IPv4 ou non. Le code ci-dessus ne renvoie que l’adresse IPv4 de notre machine. Si nous voulons obtenir l’adresse IPv6 de notre machine, nous pouvons utiliser l’attribut AddressFamily.InterNetworkV6 au lieu de AddressFamily.InterNetwork.

Obtenir l’adresse IP locale avec la propriété Socket.LocalEndPoint en C#

Un moyen plus précis d’obtenir l’adresse IP locale de notre machine lorsqu’il y a plusieurs adresses IP est de connecter un socket UDP, puis de lire son point de terminaison local. La classe Socket en C# implémente l’interface des sockets de Berkeley, qui fournit des fonctionnalités pour la communication réseau. L’exemple de code suivant nous montre comment utiliser la propriété Socket.LocalEndPoint pour déterminer l’adresse IP locale de notre machine en C#.

using System;
using System.Net;
using System.Net.Sockets;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      string localIP = string.Empty;
      using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0)) {
        socket.Connect("8.8.8.8", 65530);
        IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
        localIP = endPoint.Address.ToString();
      }
      Console.WriteLine("IP Address = " + localIP);
    }
  }
}

Production:

IP Address = 192.168.43.239

Dans le code ci-dessus, nous avons connecté le Socket socket à notre machine locale et extrait l’extrémité locale du socket avec l’attribut socket.LocalEndPoint. Nous avons utilisé l’attribut endPoint.Address pour obtenir l’adresse IP du endPoint.

Obtenir une adresse IP locale avec Linq en C#

La requête intégrée Linq ou Language fournit des fonctionnalités SQL en C#. Nous pouvons également utiliser Linq et la fonction Dns.GetHostEntry() pour obtenir l’adresse IP locale de notre machine en C#.

L’exemple de code suivant nous montre comment utiliser Linq pour obtenir l’adresse IP locale de notre machine en C#.

using System;
using System.Linq;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {
        Console.WriteLine("No Network Available");
      }

      IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());

      var ippaddress =
          host.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
      Console.WriteLine(ippaddress);
    }
  }
}

Production:

192.168.43.239

Dans le code ci-dessus, nous avons déterminé l’adresse IPv4 locale de notre machine en utilisant Linq avec la fonction Dns.GetHostEntry() en C#. Le reste du code est similaire à notre premier exemple; la seule différence est que nous n’avons extrait qu’une seule adresse IPv4 de la liste d’adresses renvoyée par la fonction Dns.GetHostEntry().

Obtenir une adresse IP locale avec la classe NetworkInterface en C#

La classe NetworkInterface contient des données sur les interfaces réseau de notre machine locale et fournit des statistiques et la configuration des interfaces réseau. La fonction GetAllNetworkInterfaces() de la classe NetworkInterface nous donne toutes les interfaces réseau de notre machine locale. La propriété NetworkInterfaceType de la classe NetworkInterface permet d’obtenir le type de l’interface réseau.

L’exemple de code suivant montre comment utiliser toutes ces fonctions pour obtenir l’adresse IP locale de notre machine locale en C#.

using System;
using System.Linq;
using System.Net;

namespace get_local_ip_address {
  class Program {
    public static void getLocalIPAddressWithNetworkInterface(NetworkInterfaceType _type) {
      string output = "";
      foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces()) {
        if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up) {
          foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses) {
            if (ip.Address.AddressFamily == AddressFamily.InterNetwork) {
              output = ip.Address.ToString();
            }
          }
        }
      }
      Console.WriteLine("IP Address = " + output);
    }
    static void Main(string[] args) {
      getLocalIPAddressWithNetworkInterface(NetworkInterfaceType.Wireless80211);
    }
  }
}

Production:

IP Address = 192.168.43.239

Nous avons récupéré l’adresse IPv4 WLAN de notre machine locale avec la classe NetworkInterface en C# dans le code ci-dessus. Le code ci-dessus peut être utilisé pour obtenir n’importe quel type d’adresse IP sur notre machine locale. Par exemple, si nous voulons obtenir l’adresse IP de l’interface Ethernet, nous devons la spécifier dans l’appel de fonction en passant NetworkInterfaceType.Ethernet.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Article connexe - Csharp Network