Obtener la dirección IP local en C#

Muhammad Maisam Abbas 16 febrero 2024
  1. Obtenga la dirección IP local con la función Dns.GetHostEntry() en C#
  2. Obtenga la dirección IP local con la propiedad Socket.LocalEndPoint en C#
  3. Obtenga una dirección IP local con Linq en C#
  4. Obtenga la dirección IP local con la clase NetworkInterface en C#
Obtener la dirección IP local en C#

En este tutorial, discutiremos métodos para obtener la dirección IP local de nuestra máquina en C#.

Obtenga la dirección IP local con la función Dns.GetHostEntry() en C#

La clase Dns obtiene la información relacionada con un host en Internet. Hay muchos métodos en la clase Dns para la funcionalidad relacionada con DNS en C#. La función Dns.GetHostEntry() se utiliza para obtener la dirección IP de un host.

El siguiente ejemplo de código nos muestra cómo podemos obtener la dirección IP local de nuestra máquina con la función 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());
      }
    }
  }
}

Producción :

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

En el código anterior, pasamos la función Dns.GetHostName() como parámetro de la función Dns.GetHostEntry() para obtener la dirección IP de nuestra máquina local en C#. El único problema con este método es que nos da todas las direcciones IP de la máquina. Para obtener la dirección IP específica, tenemos que escribir el siguiente código 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());
        }
      }
    }
  }
}

Producción :

IP Address = 192.168.43.239

En el código anterior, verificamos si ip.AddressFamily era igual a AddressFamily.InterNetwork. Esta condición comprueba si la dirección IP en la variable ip es una dirección IPv4 o no. El código anterior solo devuelve la dirección IPv4 de nuestra máquina. Si queremos obtener la dirección IPv6 de nuestra máquina, podemos usar el atributo AddressFamily.InterNetworkV6 en lugar del atributo AddressFamily.InterNetwork.

Obtenga la dirección IP local con la propiedad Socket.LocalEndPoint en C#

Una forma más precisa de obtener la dirección IP local de nuestra máquina cuando hay varias direcciones IP es conectar un socket UDP y luego leer su punto final local. La clase Socket en C# implementa la interfaz de sockets de Berkeley, que proporciona funcionalidad para la comunicación en red. El siguiente ejemplo de código nos muestra cómo podemos usar la propiedad Socket.LocalEndPoint para determinar la dirección IP local de nuestra máquina 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);
    }
  }
}

Producción :

IP Address = 192.168.43.239

En el código anterior, conectamos el Socket socket a nuestra máquina local y extrajimos el punto final local del socket con el atributo socket.LocalEndPoint. Usamos el atributo endPoint.Address para obtener la dirección IP del endPoint.

Obtenga una dirección IP local con Linq en C#

La consulta integrada Linq o Language proporciona funcionalidad SQL en C#. También podemos usar Linq y la función Dns.GetHostEntry() para obtener la dirección IP local de nuestra máquina en C#.

El siguiente ejemplo de código nos muestra cómo podemos usar Linq para obtener la dirección IP local de nuestra máquina 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);
    }
  }
}

Producción :

192.168.43.239

En el código anterior, determinamos la dirección IPv4 local de nuestra máquina usando Linq con la función Dns.GetHostEntry() en C#. El resto del código es similar a nuestro primer ejemplo; la única diferencia es que extrajimos solo una dirección IPv4 de la lista de direcciones devuelta por la función Dns.GetHostEntry().

Obtenga la dirección IP local con la clase NetworkInterface en C#

La clase NetworkInterface contiene datos sobre las interfaces de red en nuestra máquina local y proporciona estadísticas y configuración para las interfaces de red. La función GetAllNetworkInterfaces() en la clase NetworkInterface nos da todas las interfaces de red en nuestra máquina local. La propiedad NetworkInterfaceType en la clase NetworkInterface se utiliza para obtener el tipo de interfaz de red.

El siguiente ejemplo de código muestra cómo podemos usar todas estas funciones para obtener la dirección IP local de nuestra máquina local 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);
    }
  }
}

Producción :

IP Address = 192.168.43.239

Recuperamos la dirección WLAN IPv4 de nuestra máquina local con la clase NetworkInterface en C# en el código anterior. El código anterior se puede utilizar para obtener cualquier tipo de dirección IP en nuestra máquina local. Por ejemplo, si queremos obtener la dirección IP de la interfaz Ethernet, tenemos que especificarla en la llamada a la función pasando 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

Artículo relacionado - Csharp Network