Obtener dirección IP “real” con VB.NET?
Pregunta
Busco una función que me dará mi IP real, no es mi IP local. la función actualmente tengo, devuelve la IP en la red y compartir centro, que es 192.168.2.100 Pero si voy a whatismyip, entonces se le da a mi IP real.
¿Cómo podría conseguir esto utilizando VB.NET? gracias
Solución
No hay manera de hacer esto simplemente con VB.Net. Es necesario encontrar un sitio web que le dirá (tal vez uno de los suyos?) O que necesita para interactuar con el router.
Si usted tiene un sitio web que es capaz de ejecutar cualquier tipo de aplicaciones de la página web se puede crear una página web que simplemente da salida a las del cliente (como en el equipo que se conecta a la página) dirección IP.
Tengo una de mi propia:
http://etoys.netortech.com/devpages/ip.asp
A pesar de que no puedo garantizar que siempre estará ahí por lo que usted debe hacer su propia cuenta.
A partir de ahí es una cuestión sencilla de utilizar un HttpWebRequest para descargar el el contenido de la página.
Otros consejos
Para combinar las respuestas anteriores" Crear un archivo PHP y pegar esto en él:
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
guardarlo como curip.php y subirlo a su servidor.
En su proyecto VB.net crear un módulo. Declarar la sección de las importaciones en la parte superior
Imports System.Net
Imports System.IO
Y crear su función:
Public Function GetIP() As String
Dim uri_val As New Uri("http://yourdomain.com/curip.php")
Dim request As HttpWebRequest = HttpWebRequest.Create(uri_val)
request.Method = WebRequestMethods.Http.Get
Dim response As HttpWebResponse = request.GetResponse()
Dim reader As New StreamReader(response.GetResponseStream())
Dim myIP As String = reader.ReadToEnd()
response.Close()
Return myIP
End Function
Ahora cualquier parte del código puede emitir
Dim myIP = GetIP()
como utilizar el valor de allí como desee.
Soy probablemente sólo ser excéntrico aquí, pero no puedo evitar pensar que su dirección IP "real" es el devuelto por ifconfig (ipconfig) en su máquina local. 192.168.2.100 en su caso. Cualquiera que sea la traducción NAT o un túnel que pasa entre usted y el extremo remoto no debe importar, y si lo hace, hay una buena probabilidad de que estás haciendo algo que podría hacer que su aplicación sólo funciona en su entorno actual.
Me gustaría utilizar un sitio a disposición del público que devuelve su dirección IP pública en respuesta.
Los factores clave son:
- La disponibilidad del servicio. El funcionamiento de su propio servicio garantiza un control total sobre él y el conocimiento de cuando está disponible y cuando no lo es. Pero en algunos casos podría ser demasiado trabajo para una tarea tan sencilla.
- Reducir al mínimo el desorden adicional contenida en la respuesta. Hay sitios de la abundancia que le permite obtener su dirección IP pública, pero a menudo lo hacen en forma de una página HTML. Extraer el pequeño fragmento de la página que contiene la dirección IP puede ser que necesite un código adicional.
Teniendo en cuenta estos dos factores recomendaría este URL: http://wtfismyip.com/text Se tiene la ventaja de volver solamente la dirección IP en forma textual. También hay versiones para:
Escoja el formato que sea más fácil para que usted pueda analizar.
No es necesario utilizar un archivo PHP sólo tiene que utilizar un sitio que muestra su IP como ip-adress.com y luego obtener la IP desde allí con WebRequest y luego usar función GetBetween .
divertirse:)
Uso de PHP que se puede hacer simplemente:
Como "shaiss" compartió el código PHP, este es el código de VB.net:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim myip As HttpWebRequest = HttpWebRequest.Create("http://YourHosting.com/curip.php")
Dim grab As HttpWebResponse = myip.GetResponse()
Dim stream As Stream = grab.GetResponseStream
Dim SR As New StreamReader(stream)
TextBox1.Text = SR.ReadToEnd()
End Sub
End Class
Esto es sólo un ejemplo con:
1 - Formulario
1 - Cuadro de texto
1 - Button (s)
Espero que esto ayude!
Yo tenía la misma pregunta y busqué un poco sólo para recordar que yo puedo hacer esto con WebBrowser!
Private Sub getExtIP() Handles activeProjectsWB.DocumentCompleted
If gotIP = False And populateProjectCollectionBLN = True Then
If activeProjectsWB.ReadyState = WebBrowserReadyState.Interactive Or activeProjectsWB.ReadyState = WebBrowserReadyState.Complete Then
Dim unformattedExtIP As String = activeProjectsWB.Document.GetElementsByTagName("title").Item(0).OuterHtml
Dim onlyIPAddress As String = String.Empty
For Each character In unformattedExtIP
Dim result As Integer = 0
If Not (Integer.TryParse(character, result) = 0) Or character = "." Then
onlyIPAddress = onlyIPAddress & character
End If
Next
extIP = onlyIPAddress
gotIP = True
End If
End If
End Sub
Esta subrutina se activa sólo cuando se navega a una página web utilizando WebBrowser.Navigate()
.
Existe la booleano gotIP
porque tengo otra subrutina que se activa en cualquier finalización documento. No quiero que sea activado más de una vez. Si no está familiarizado con WebBrowser
, comprobar para asegurarse de que la página web se carga con suficiente ReadyState
. Si no lo hace, puede obtener una excepción (ya que el contenido no está cargado).
Puede utilizar cualquier sitio que te gusta. Este sitio es bueno porque pone su dirección IP en el título. Eso es bueno, porque no va a haber una etiqueta title
. En el caso de que no se puede utilizar este sitio (o uno que tiene una etiqueta única con su contenido dentro de ella), utilizar un bucle For Each
.
For Each instance As HtmlElement In activeProjectsWB.Document.GetElementsByTagName("InsertTagHere")
'do something to find the tag that contains your IP address
Next