Obtener IP de una URL mediante VB. Net 2010

Iniciado por okik, 2 Febrero 2015, 19:52 PM

0 Miembros y 2 Visitantes están viendo este tema.

okik

Hola
He buscado y buscado pero no lo he conseguido. Todo lo que encuentro es similar a esto

Código (vbnet) [Seleccionar]
Imports System.Net
Public Class Form1
   Dim mem As String
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



       Dim strHostName As String
       Dim strIPAddress As String
       strHostName = "http://www.google.es"
       strHostName = System.Net.Dns.GetHostName()
       strIPAddress = System.Net.Dns.GetHostEntry(strHostName).AddressList(0).ToString()

       mem = strIPAddress
       TextBox1.Text = strIPAddress

   End Sub
End Class


Pero no funciona

el código original en lugar de poner:

System.Net.Dns.GetHostEntry

ponía:   System.Net.Dns.GetHostByName

pero VB2010 me lo pone como error con una linea verde debajo en señal de advertencia de posible error. si uso  GetHostEntry no me lo subraya pero me da un número muy raro con expresiones variadas

si uso GetHostByName me da un IP normal del tipo:

XX.XXX.XX.XXX

pero siempre me da el mismo. Da igual la URL que introduzca en strHostName


Gracias

okik

Ya lo he conseguido  ;)

Este es el código para VB.Net 2010:

Código (vb) [Seleccionar]
Imports System.Net
Public Class Form1
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim host As IPHostEntry = Dns.GetHostEntry("www.google.es")
       Dim ip As IPAddress() = host.AddressList
       Dim index As Integer

       For index = 0 To ip.Length - 1
           TextBox1.Text = ip(index).ToString
       Next index
   End Sub
End Class

seba123neo

en teoria, el primer valor del array es la IP, asi que no hace falta hacer el bucle for.

proba solo poner:

Código (vbnet) [Seleccionar]
TextBox1.Text = ip(0).ToString
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

Eleкtro

#3
Cita de: seba123neo en  4 Febrero 2015, 16:34 PM
en teoria, el primer valor del array es la IP, asi que no hace falta hacer el bucle for.

Código (vbnet) [Seleccionar]
TextBox1.Text = ip(0).ToString

Hombre en teoría es la IP ya que es una lista de direcciones, el problema es que a veces el primer item de la colección suele ser una IPv6, a mi también me dió problemas en el pasado.




Bueno, he escrito un ejemplo para ayudarte a obtener las IPv4 asociadas con "X" página

Modo de empleo:
Código (vbnet) [Seleccionar]
       Dim IPv4List As New List(Of String)(HostNameToIP("foro.elhacker.net", Net.Sockets.AddressFamily.InterNetwork))
       Dim IPv6List As New List(Of String)(HostNameToIP("LOCALHOST", Net.Sockets.AddressFamily.InterNetworkV6))

       MessageBox.Show(IPv4List(0)) ' Result: 108.162.205.73
       MessageBox.Show(IPv6List(0)) ' Result: ::1


Source:
Código (vbnet) [Seleccionar]
   ' HostName To IP
   ' By Elektro
   '
   ' Usage Examples :
   ' MessageBox.Show(HostNameToIP("foro.elhacker.net", Net.Sockets.AddressFamily.InterNetwork).First)
   '
   ''' <summary>
   ''' Gets the specified addresses associated to a Host.
   ''' </summary>
   ''' <param name="hotsName">The Host name.</param>
   ''' <param name="addressFamily">The address family.</param>
   ''' <returns>The addresses.</returns>
   ''' <exception cref="System.NotImplementedException">Address filtering not implemented yet.</exception>
   Public Function HostNameToIP(ByVal hotsName As String,
                                ByVal addressFamily As Net.Sockets.AddressFamily) As IEnumerable(Of String)

       Dim hostInfo As Net.IPHostEntry = Net.Dns.GetHostEntry(hotsName)
       Dim addressList As IEnumerable(Of String)

       Try
           hostInfo = Net.Dns.GetHostEntry(hotsName)

           Select Case addressFamily

               Case Net.Sockets.AddressFamily.InterNetwork,
                   Net.Sockets.AddressFamily.InterNetworkV6 ' IPv4, IPv6.

                   addressList = From address As Net.IPAddress In hostInfo.AddressList
                                 Where address.AddressFamily = addressFamily
                                 Select (address.ToString)

               Case Else
                   Throw New NotImplementedException("Address filtering not implemented yet.")

           End Select

       Catch ex As Net.Sockets.SocketException
           Throw

       Catch ex As ArgumentNullException
           Throw

       Catch ex As Exception
           Throw

       End Try

       Return addressList

   End Function








seba123neo

a mi tambien me dio problema con el ipv6 pero para sacar la ip de una red local, no de un host remoto, no sabria si pasa lo mismo tambien en ese caso.
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