sábado, 26 de marzo de 2016

Pregunta C# (13 de 20): ¿Cómo Obtener las Direcciones IP del Sistema?

Índice

1. Introducción
2. Palabras Clave
3. Contexto
3.1 Dirección IP
3.2 Dirección IP privada
3.3 Dirección IP pública
4. ¿Cómo Obtener los Tipos de Dirección IP Asociados a un Sistema?
4.1 Obtener IP privada
4.2 Obtener IP pública
5. Recursos
6. Conclusiones
7. Literatura & Enlaces

1. Introducción

Con esta treceava pregunta C# se demuestra el código C# necesario para recuperar las direcciones IP del sistema: tanto privada(s) como pública. Para responder a esta pregunta se usarán varios de los elementos de programa de .NET Framework: NetworkInterface, AddressFamily, WebRequest, WebResponse, StreamReader, entre otros. Estos tipos están especializados, como se demuestra en la sección demostrativa, en la interacción de con interfaces de red, comunicación hacia una red externa -como Internet-, la lectura de contenido HTML.

2. Palabras Clave

  • Dirección IP
  • Dirección IP privada
  • Dirección IP pública
  • Dispositivo de comunicación
  • HTML
  • Interfaz de red
  • URL
  • Web

3. Contexto

3.1 Dirección IP

Una dirección es un número asociado a una interfaz de red (medio físico de conexión y comunicación) de un dispositivo de comunicación (teléfono inteligente, laptop, tablet, computador de escritorio). Este número identifica de modo lógico y jerárquico al dispositivo en una red de cómputo ("Dirección IP", 2016).

Esta dirección tiene diferentes formatos numéricos. Por ejemplo la dirección IP 192.0.2.235 queda así en los diferentes representaciones:
  • Decimal: 192.0.2.235
  • Hexadecimal: 
    • Estándar: 0xC00002EB
    • Formato de separación por puntos: 0xC0.0x00.0x02.0xEB
    • Octal: 0300.0000.0002.0353

3.2 Dirección IP privada

Con una dirección IP privada se identifica dispositivos de comunicación de una red de cómputo doméstica o privada. Una dirección IP de este tipo está bajo los siguientes rangos de IP:
  • De 10.0.0.0 a 10.255.255.255
  • De 172.16.0.0 a 172.31.255.255
  • De 168.0.0.0 a 192.168.255.255
  • De 169.254.0.0 a 169.254.255.255

3.3 Dirección IP pública

En Internet cada dispositivo de comunicación tiene asignada de forma directa una dirección IP que lo identifica de forma unívoca.

Sitios de acceso público tienen una dirección IP pública asignada; por ejemplo:
  • www.microsoft.com: 23.100.122.175
  • www.google.com: 216.58.217.142
  • www.facebook.com: 173.252.120.68

4. ¿Cómo Obtener los tipos de Dirección IP Asociadas a un Sistema?

4.1 Obtener dirección IP privada

El siguiente código C# recupera las direcciones IP privadas asignadas a las interfaces de red de un determinado sistema.

En las líneas 2 y 3 se referencian los namespaces:
  • System.Net.NetworkInformation, y 
  • System.Net.Sockets
para hacer uso de los tipos de datos NetworkInterfaces, AddressFamily.

Con el ciclo foreach (líneas 12-23) se itera por el conjunto de interfaces instaladas en el dispositivo actual. Por cada iteración, con el ciclo foreach (líneas 15-22) se recupera las direcciones IP privadas asignadas a cada una de las interfaces de red.

Luego, en la línea 18 se valida que la dirección IP privada actual sea de tipo IPv4.

Compilación:

csc /t:exe IpPrivada.cs

Ejecución assembly:

.\IpPrivada.exe

Demostración ejecución assembly (local): 
Ejecución assembly IpPrivada.exe
Figura 1. Ejecución assembly IpPrivada.exe.
Las direcciones IP privadas para este sistema son:
  • 192.168.1.2
  • 127.0.0.1
[Nota: Los resultados pueden variar dependiendo del número de interfaces de red activas en el sistema.]

4.2 Obtener dirección IP pública

Para obtener la dirección IP pública se usará el servicio que provee dyndns.org.

En la línea 12 se declara la variable htmlIpPublica de tipo String para almacenar el código HTML generado por la URL http://checkip.dyndns.org/. Este código HTML contiene la dirección IP pública que es de interés para esta demostración. Con la línea 15, se crea la solicitud Web por medio del método static Create de la clase WebRequest.


Más adelante, en la línea 18 con using se crea un objeto WebResponse para obtener la respuesta desde el URL http://checkip.dyndns.org/. Con la instrucción de la línea 21 se invoca al método ReadToEnd para leer todo el código HTML generado por la respuesta.

Para extraer el texto que representa la dirección IP pública se crea la expresión regular 

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b


que coincide con el formato de dirección IP ddd.ddd.ddd.ddd (este formato corresponde con la representación decimal de punto para una dirección IP).

En la línea 29 se muestra la dirección IP pública asociada a este dispositivo.


Compilación:

csc /t:exe IpPublica.cs

Ejecución assembly

.\IpPublica.exe


Demostración ejecución assembly (local): 
Ejecución assembly IpPublica.exe
Figura 2. Ejecución assembly IpPublica.exe.

5. Recursos

Este es el vídeo en donde el equipo de expertos (Gerry O'Brein y Paul Pardi) de MVA responden y explican esta pregunta:

6. Conclusiones

Se ha escrito el código C# para la recuperación de las direcciones IP privadas y públicas. Este conocimiento es de utilidad, por ejemplo, para escribir aplicaciones que requieran manipular o conocer los diferentes tipos de dirección IP para comunicarse con otras aplicaciones u otras aplicaciones externas.

En la siguiente pregunta C# se muestra cómo calcular la edad de una persona usando código C#.

7. Literatura & Enlaces

Top C# Questions Answered | Microsoft Virtual Academy (2016, marzo 26). Recuperado desde: https://mva.microsoft.com/en-US/training-courses/twenty-c-questions-answered-8298?l=JpBF7UYy_4104984382
Dirección IP (2016, marzo 26). Recuperado desde: https://es.wikipedia.org/wiki/Direcci%C3%B3n_IP


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.