Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Crazy.sx en 28 Noviembre 2012, 05:46 AM

Título: [¿?] La IP me sale en un formato que no entiendo.
Publicado por: Crazy.sx en 28 Noviembre 2012, 05:46 AM
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.
Título: Re: [¿?] La IP me sale en un formato que no entiendo.
Publicado por: kub0x en 28 Noviembre 2012, 08:28 AM
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!
Título: Re: [¿?] La IP me sale en un formato que no entiendo.
Publicado por: seba123neo en 28 Noviembre 2012, 13:29 PM
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.
Título: Re: [¿?] La IP me sale en un formato que no entiendo.
Publicado por: Keyen Night en 28 Noviembre 2012, 15:44 PM
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
Título: Re: [¿?] La IP me sale en un formato que no entiendo.
Publicado por: Crazy.sx en 28 Noviembre 2012, 20:08 PM
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.  ;)
Título: Re: [¿?] La IP me sale en un formato que no entiendo.
Publicado por: seba123neo en 28 Noviembre 2012, 20:19 PM
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.
Título: Re: [¿?] La IP me sale en un formato que no entiendo.
Publicado por: Crazy.sx en 28 Noviembre 2012, 20:27 PM
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.