Foro de elhacker.net

Programación => .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
  1. 192.168.1.2
pero me muestra lo siguiente:

Esta sería la IP: :huh:
Código
  1. fe80::3ddd:f4d5:69b7:ddd8%12



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

Código
  1.            Dim Host As String
  2.            Host = Dns.GetHostName
  3.            Dim IPs As IPHostEntry = Dns.GetHostEntry(Host)
  4.            Dim Direcciones As IPAddress() = IPs.AddressList
  5.            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
A la hora de mostrar la IP del equipo me sale en un formato raro.

Mi IP es:
Código
  1. 192.168.1.2
pero me muestra lo siguiente:

Esta sería la IP: :huh:
Código
  1. 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
  1.    Public Function GetPublicIP() As IPAddress
  2.  
  3.        GetPublicIP = Nothing
  4.  
  5.        Dim LocalHost As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName)
  6.  
  7.        For Each Address In LocalHost.AddressList
  8.            'Si no es IPv6'
  9.            If Not (Address.IsIPv6SiteLocal Or Address.IsIPv6Multicast Or Address.IsIPv6LinkLocal) Then
  10.                'Si es de la familia InterNetwork'
  11.                If Address.AddressFamily = Sockets.AddressFamily.InterNetwork Then
  12.                    'Y no es privada'
  13.                    If Not IsPrivateIP(Address) Then
  14.                        Return Address
  15.                    End If
  16.                End If
  17.            End If
  18.        Next
  19.  
  20.    End Function
  21.  
  22.    Public Function IsPrivateIP(ByVal IP As IPAddress) As Boolean
  23.  
  24.        Dim _0, _1 As Byte
  25.  
  26.        'Si el primer byte es 10 es privada'
  27.        'Si el primer byte es 172 y el segundo está entre 16-31 es privada'
  28.        'Si el segundo byte es 168 es privada'
  29.        'De lo contrario es pública'
  30.  
  31.        _0 = IP.GetAddressBytes(0)
  32.        _1 = IP.GetAddressBytes(1)
  33.  
  34.        Select Case _0
  35.            Case 10
  36.                Return True
  37.            Case 172
  38.                If _1 >= 16 And _1 <= 31 Then Return True
  39.            Case 192
  40.                If _1 = 168 Then Return True
  41.        End Select
  42.  
  43.        Return False
  44.  
  45.    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):

Citar
Adaptador 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
  1. 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
  1. Address.AddressFamily = Sockets.AddressFamily.InterNetwork

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

Código
  1.  Dim Host As IPHostEntry
  2.            Dim IPLocal As String = vbNullString
  3.            Host = Dns.GetHostEntry(Dns.GetHostName())
  4.            For Each ip As IPAddress In Host.AddressList
  5.                If ip.AddressFamily = Sockets.AddressFamily.InterNetwork Then
  6.                    'If ip.AddressFamily.ToString() = "InterNetwork" Then 'Tambien lo puedo hacer así jejeje
  7.                    IPLocal = ip.ToString
  8.                End If
  9.            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.