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: 192.168.1.2 pero me muestra lo siguiente:
Esta sería la IP: :huh: fe80::3ddd:f4d5:69b7:ddd8%12
Este es el código que empleo (VB.NET 2010)
            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.
			
			
			
				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: 192.168.1.2 pero me muestra lo siguiente:
Esta sería la IP: :huh: 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!
			
 
			
			
				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.
			
			
			
				Hay que filtrar el AddressList para hallar la IPv4 pública ;)
Aquí te dejo el código:
    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
			
			
			
				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):
MiIP.Text = Direcciones(5).ToString()Muchas gracias.  ;)
			
 
			
			
				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.
			
			
			
				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:
Address.AddressFamily = Sockets.AddressFamily.InterNetwork
... y entonces, me puse a probar y pude solucionar mi intringulis: 
  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.