84 votes

Comment obtenir l'interface réseau et sa bonne adresse IPv4 ?

Je dois savoir comment obtenir toutes les interfaces réseau avec leur adresse IPv4. Ou juste wireless et Ethernet.

Pour obtenir tous les détails des interfaces réseau, j'utilise ceci:

foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) {
    if(ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 ||
       ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet) {

        Console.WriteLine(ni.Name);
    }
}

Et pour obtenir toutes les adresses IPv4 hébergées par l'ordinateur:

IPAddress [] IPS = Dns.GetHostAddresses(Dns.GetHostName());
foreach (IPAddress ip in IPS) {
    if (ip.AddressFamily == AddressFamily.InterNetwork) {

        Console.WriteLine("Adresse IP : " + ip);
    }
}

Mais comment obtenir l'interface réseau et sa bonne adresse IPv4?

1 votes

Veuillez lire un peu plus attentivement. Voir GetIPProperties

0 votes

@JohnSaunders d'accord, j'ai vérifié votre lien, je l'ai lu... et j'ai essayé... mais je n'ai pas obtenu l'adresse IPV4 !! comme 192.168.1.25 !!

3 votes

D'accord, c'est un peu plus subtil que ce que je pensais. Voir IPGlobalProperties.GetUnicastAddresses

129voto

bwall Points 479
foreach(NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
   if(ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
   {
       Console.WriteLine(ni.Name);
       foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
       {
           if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
           {
               Console.WriteLine(ip.Address.ToString());
           }
       }
   }  
}

Cela devrait vous donner ce que vous voulez. ip.Address est une adresse IP que vous voulez.

0 votes

@Joseph ton lien est mort :/

3 votes

@Felk merci, voici l'URL d'origine gist.github.com/anonymous/ff82643c9a004281544a

9voto

Mc_Topaz Points 406

Une ligne avec Lamda :

utiliser System.Collections.Generic;
utiliser System.Linq;
utiliser System.Net;
utiliser System.Net.Sockets;
utiliser System.Net.NetworkInformation;

var ipV4s = NetworkInterface.GetAllNetworkInterfaces()
    .Select(i => i.GetIPProperties().UnicastAddresses)
    .SelectMany(u => u)
    .Where(u => u.Address.AddressFamily == AddressFamily.InterNetwork)
    .Select(i => i.Address);

5voto

Lance Larsen Points 231

Ces réponses m'orientent dans la bonne direction - merci aux auteurs précédents! Pour ceux qui cherchent des méthodes plug and play, voici ce qui a fonctionné pour moi.

public System.Net.IPAddress GetIpAddress()
{
    return NetworkInterface
        .GetAllNetworkInterfaces()
        .Where(n => n.OperationalStatus == OperationalStatus.Up)
        .Where(n => n.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || n.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
        .Where(n => n.Name == "Wi-Fi")
        .SelectMany(n => n.GetIPProperties()?.UnicastAddresses)
        .Where(n => n.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
        .Select(g => g?.Address)
        .Where(a => a != null)
        .FirstOrDefault();
}

public System.Net.IPAddress GetDefaultGateway()
{
    return NetworkInterface
        .GetAllNetworkInterfaces()
        .Where(n => n.OperationalStatus == OperationalStatus.Up)
        .Where(n => n.NetworkInterfaceType != NetworkInterfaceType.Loopback)
        .SelectMany(n => n.GetIPProperties()?.GatewayAddresses)
        .Select(g => g?.Address)
        .Where(a => a != null)
        .FirstOrDefault();
}

3voto

Hady Mahmoodi Points 49

Avec quelques améliorations, ce code ajoute une interface à une combinaison :

private void LanSetting_Load(object sender, EventArgs e)
{
    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
    {
        if ((nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet) || (nic.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)) //&& (nic.OperationalStatus == OperationalStatus.Up))
        {
            comboBoxLanInternet.Items.Add(nic.Description);
        }
    }
}

Et lors de la sélection de l'une d'entre elles, ce code renvoie l'adresse IP de l'interface :

private void comboBoxLanInternet_SelectedIndexChanged(object sender, EventArgs e)
{
    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
    {
        foreach (UnicastIPAddressInformation ip in nic.GetIPProperties().UnicastAddresses)
        {
            if (nic.Description == comboBoxLanInternet.SelectedItem.ToString())
            {
                if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    MessageBox.Show(ip.Address.ToString());
                }
            }
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X