[¿?] La IP me sale en un formato que no entiendo.

Iniciado por Crazy.sx, 28 Noviembre 2012, 05:46 AM

0 Miembros y 1 Visitante están viendo este tema.

Crazy.sx

Estoy haciendo un programa para WIFI pero tengo un problemita. A la hora de mostrar la IP del equipo me sale en un formato raro.

Mi IP es:
Código (vbnet) [Seleccionar]
192.168.1.2 pero me muestra lo siguiente:

Esta sería la IP: :huh:
Código (vbnet) [Seleccionar]
fe80::3ddd:f4d5:69b7:ddd8%12



Este es el código que empleo (VB.NET 2010)

Código (vbnet) [Seleccionar]
            Dim Host As String
            Host = Dns.GetHostName
            Dim IPs As IPHostEntry = Dns.GetHostEntry(Host)
            Dim Direcciones As IPAddress() = IPs.AddressList
            MiIP.Text = Direcciones(0).ToString()


Lo he revisado y comparado con otros códigos pero nada. ¿Qué puede ser?

Gracias.
Destruir K. LOL

kub0x

Cita de: Lucas.AR en 28 Noviembre 2012, 05:46 AM
A la hora de mostrar la IP del equipo me sale en un formato raro.

Mi IP es:
Código (vbnet) [Seleccionar]
192.168.1.2 pero me muestra lo siguiente:

Esta sería la IP: :huh:
Código (vbnet) [Seleccionar]
fe80::3ddd:f4d5:69b7:ddd8%12

Es la IP en formato IPv6 asociada a tu máquina. Seguramente tu dirección local IPv4 estára en la posición Direcciones(1) ya que es un Array de Direcciones IPs pertenecientes a tu máquina.

Saludos!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


seba123neo

si, aparte te muestra siempre la primera, fijate abria la consola y hace un ipconfig /all, ahi te deben aparecerlas direcciones de los adaptadores que tengas, para que te muestre la verdadera ip local debes recorrer los adaptadores y de ahi filtrar los que son de tipo local o algo asi, no me acuerdo pero en internet si buscas lo encontras.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Keyen Night

#3
Hay que filtrar el AddressList para hallar la IPv4 pública ;)

Aquí te dejo el código:

Código (vb.net) [Seleccionar]

   Public Function GetPublicIP() As IPAddress

       GetPublicIP = Nothing

       Dim LocalHost As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName)

       For Each Address In LocalHost.AddressList
           'Si no es IPv6'
           If Not (Address.IsIPv6SiteLocal Or Address.IsIPv6Multicast Or Address.IsIPv6LinkLocal) Then
               'Si es de la familia InterNetwork'
               If Address.AddressFamily = Sockets.AddressFamily.InterNetwork Then
                   'Y no es privada'
                   If Not IsPrivateIP(Address) Then
                       Return Address
                   End If
               End If
           End If
       Next

   End Function

   Public Function IsPrivateIP(ByVal IP As IPAddress) As Boolean

       Dim _0, _1 As Byte

       'Si el primer byte es 10 es privada'
       'Si el primer byte es 172 y el segundo está entre 16-31 es privada'
       'Si el segundo byte es 168 es privada'
       'De lo contrario es pública'

       _0 = IP.GetAddressBytes(0)
       _1 = IP.GetAddressBytes(1)

       Select Case _0
           Case 10
               Return True
           Case 172
               If _1 >= 16 And _1 <= 31 Then Return True
           Case 192
               If _1 = 168 Then Return True
       End Select

       Return False

   End Function
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

Crazy.sx

Tienen razón, no me di cuenta de eso. Se trata de la IPv6.

A medida que voy aumentando de a uno los valores me van saliendo distintos resultados y comparando con lo que me sale en la consola sería así (no se si cambia en todos las computadoras):

CitarAdaptador de LAN inalámbrica Conexión de red inalámbrica:

(3) Dirección IPv6 . . . . . . . . . . : 2002:c7c8:c8bb:c:3ddd:f4d5:69b7:ddd8
(1 )Sitio: dirección IPv6 local. . . . : fec0::c:3ddd:f4d5:69b7:ddd8%2

(4) Dirección IPv6 temporal. . . . . . : 2002:c7c8:c8bb:c:e00f:c51c:971d:fa56

(0) Vínculo: dirección IPv6 local. . . : fe80::3ddd:f4d5:69b7:ddd8%12

(5) Dirección IPv4. . . . . . . . . . . . . . : 192.168.1.2

Adaptador de túnel Teredo Tunneling Pseudo-Interface:

(6)Dirección IPv6 . . . . . . . . . . : 2001:0:9d38:6ab8:101d:395a:3f57:fefd
(2) Vínculo: dirección IPv6 local. . . : fe80::101d:395a:3f57:fefd%13


Como verán, si quisiera mostrar sin problemas la "Dirección IPv4" debo utilizar la posición (5):

Código (vbnet) [Seleccionar]
MiIP.Text = Direcciones(5).ToString()

Muchas gracias.  ;)
Destruir K. LOL

seba123neo

si, pero no siempre va a ser la 5, por eso debes usar ese codigo que recorre cada uno de los adaptadores de red que tengas y filtrar cuando llega a una direccion de tipo IPv4, entonces esa es la direccion que tenes que sacar.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Crazy.sx

#6
Sí, me fijé con otra notebook y me salió cualquier cosa.  :rolleyes:

Estaba revisando el código de Keyen Night y no me funcionó pero me llamó la atención esta parte que tampoco me había dado cuenta:

Código (vbnet) [Seleccionar]
Address.AddressFamily = Sockets.AddressFamily.InterNetwork

... y entonces, me puse a probar y pude solucionar mi intringulis:

Código (vbnet) [Seleccionar]
 Dim Host As IPHostEntry
           Dim IPLocal As String = vbNullString
           Host = Dns.GetHostEntry(Dns.GetHostName())
           For Each ip As IPAddress In Host.AddressList
               If ip.AddressFamily = Sockets.AddressFamily.InterNetwork Then
                   'If ip.AddressFamily.ToString() = "InterNetwork" Then 'Tambien lo puedo hacer así jejeje
                   IPLocal = ip.ToString
               End If
           Next


Donde también puedo poner .InterNetworkV6 y veo la IPv6  :P

Muchas gracias a todos de nuevo. Puedo suspirar tranquilo ahora, jaja.  :xD

Un abrazo.
Destruir K. LOL