Ottieni indirizzo IP locale in C#

Muhammad Maisam Abbas 16 febbraio 2024
  1. Ottieni indirizzo IP locale con la funzione Dns.GetHostEntry() in C#
  2. Ottieni indirizzo IP locale con la proprietà Socket.LocalEndPoint in C#
  3. Ottieni indirizzo IP locale con Linq in C#
  4. Ottieni indirizzo IP locale con la classe NetworkInterface in C#
Ottieni indirizzo IP locale in C#

In questo tutorial, discuteremo i metodi per ottenere l’indirizzo IP locale della nostra macchina in C#.

Ottieni indirizzo IP locale con la funzione Dns.GetHostEntry() in C#

La classe Dns ottiene le informazioni relative a un host su Internet. Ci sono molti metodi nella classe Dns per le funzionalità relative al DNS in C#. La funzione Dns.GetHostEntry() viene utilizzata per ottenere l’indirizzo IP di un host.

Il seguente esempio di codice ci mostra come possiamo ottenere l’indirizzo IP locale della nostra macchina con la funzione Dns.GetHostEntry() in 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());
      }
    }
  }
}

Produzione:

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

Nel codice precedente, abbiamo passato la funzione Dns.GetHostName() come parametro della funzione Dns.GetHostEntry() per ottenere l’indirizzo IP della nostra macchina locale in C#. L’unico problema con questo metodo è che ci fornisce tutti gli indirizzi IP della macchina. Per ottenere l’indirizzo IP specifico, dobbiamo scrivere il codice seguente in 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());
        }
      }
    }
  }
}

Produzione:

IP Address = 192.168.43.239

Nel codice sopra, abbiamo verificato se ip.AddressFamily era uguale a AddressFamily.InterNetwork. Questa condizione controlla se l’indirizzo IP nella variabile ip è un indirizzo IPv4 o meno. Il codice sopra restituisce solo l’indirizzo IPv4 della nostra macchina. Se vogliamo ottenere l’indirizzo IPv6 della nostra macchina, possiamo usare l’attributo AddressFamily.InterNetworkV6 invece di AddressFamily.InterNetwork.

Ottieni indirizzo IP locale con la proprietà Socket.LocalEndPoint in C#

Un modo più accurato per ottenere l’indirizzo IP locale della nostra macchina quando ci sono più indirizzi IP è connettere un socket UDP e quindi leggere il suo endpoint locale. La classe Socket in C# implementa l’interfaccia dei socket Berkeley, che fornisce funzionalità per la comunicazione di rete. Il seguente esempio di codice ci mostra come possiamo usare la proprietà Socket.LocalEndPoint per determinare l’indirizzo IP locale della nostra macchina in 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);
    }
  }
}

Produzione:

IP Address = 192.168.43.239

Nel codice precedente, abbiamo collegato il Socket socket alla nostra macchina locale ed abbiamo estratto l’endpoint locale del socket con l’attributo socket.LocalEndPoint. Abbiamo utilizzato l’attributo endPoint.Address per ottenere l’indirizzo IP di endPoint.

Ottieni indirizzo IP locale con Linq in C#

La query integrata Linq o Language fornisce funzionalità SQL in C#. Possiamo anche usare Linq e la funzione Dns.GetHostEntry() per ottenere l’indirizzo IP locale della nostra macchina in C#.

Il seguente esempio di codice ci mostra come possiamo usare Linq per ottenere l’indirizzo IP locale della nostra macchina in 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);
    }
  }
}

Produzione:

192.168.43.239

Nel codice sopra, abbiamo determinato l’indirizzo IPv4 locale della nostra macchina utilizzando Linq con la funzione Dns.GetHostEntry() in C#. Il resto del codice è simile al nostro primo esempio; l’unica differenza è che abbiamo estratto un solo indirizzo IPv4 dall’lista di indirizzi restituiti dalla funzione Dns.GetHostEntry().

Ottieni indirizzo IP locale con la classe NetworkInterface in C#

La classe NetworkInterface contiene i dati sulle interfacce di rete sulla nostra macchina locale e fornisce statistiche e configurazione per le interfacce di rete. La funzione GetAllNetworkInterfaces() nella classe NetworkInterface ci fornisce tutte le interfacce di rete sulla nostra macchina locale. La proprietà NetworkInterfaceType nella classe NetworkInterface viene utilizzata per ottenere il tipo di interfaccia di rete.

Il seguente esempio di codice mostra come possiamo usare tutte queste funzioni per ottenere l’indirizzo IP locale della nostra macchina locale in 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);
    }
  }
}

Produzione:

IP Address = 192.168.43.239

Abbiamo recuperato l’indirizzo IPv4 WLAN della nostra macchina locale con la classe NetworkInterface in C# nel codice sopra. Il codice sopra può essere utilizzato per ottenere qualsiasi tipo di indirizzo IP sulla nostra macchina locale. Ad esempio, se vogliamo ottenere l’indirizzo IP dell’interfaccia Ethernet, dobbiamo specificarlo nella chiamata alla funzione passando 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

Articolo correlato - Csharp Network