Obter o endereço IP “real” com VB.NET?
Pergunta
Eu estou procurando uma função que vai me dar o meu verdadeiro IP, não o meu IP local. a função eu tenho atualmente, retorna o ip na rede eo compartilhamento de centro que é 192.168.2.100 Mas se eu for para WhatIsMyIp, então dá o meu verdadeiro IP.
Como eu poderia obter esta usando VB.NET? graças
Solução
Não há nenhuma maneira de fazer isso apenas com VB.Net. Você precisa encontrar um site que irá dizer-lhe (talvez uma de sua preferência?) Ou você precisa para fazer a interface com o roteador.
Se você tem um site que é capaz de executar qualquer tipo de aplicações de páginas web você pode criar uma página web que simplesmente emite o cliente (como no computador conectar à página) IP endereço.
Eu tenho um dos meus próprios:
http://etoys.netortech.com/devpages/ip.asp
Embora eu não posso garantir que será sempre lá e é por isso que você deve fazer o seu próprio.
De lá, é uma simples questão de usar um HttpWebRequest para baixar o o conteúdo da página.
Outras dicas
Para combinar as respostas acima" Crie um arquivo php e cole este nele:
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
salvá-lo como curip.php e enviá-lo para o servidor.
Em seu projeto VB.net criar um módulo. Declare a seção de importações no topo
Imports System.Net
Imports System.IO
E criar sua função:
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
Agora, em qualquer lugar no seu código, você pode emitir
Dim myIP = GetIP()
como o uso do valor de lá como você deseja.
Eu estou provavelmente apenas ser extravagante aqui, mas não posso deixar de pensar que o seu endereço de IP "real" é aquele retornado por ifconfig (ipconfig) em sua máquina local. 192.168.2.100 no seu caso. Seja qual for a tradução NAT ou tunneling acontece entre você e para o ponto de extremidade remoto não deve importar, e se isso acontecer, há uma boa chance que você está fazendo algo que poderia fazer a sua aplicação só trabalho em seu ambiente atual.
Gostaria de usar um site disponível publicamente que retorna seu endereço IP público em resposta.
Os fatores-chave aqui são:
- A disponibilidade do serviço. Executando o seu próprio serviço garante total controle sobre ele e conhecimento de quando ele estiver disponível e quando não é. Mas, em alguns casos, pode ser apenas muito trabalho para uma tarefa tão simples.
- Minimizar a desordem adicional contida na resposta. Há muitos locais que lhe permite obter o seu endereço IP público, mas que muitas vezes fazer isso na forma de uma página HTML. Extraindo o pequeno fragmento da página que contém o endereço IP pode precisar de código adicional.
Tendo em mente esses dois fatores Gostaria de recomendar este URL: http://wtfismyip.com/text Ele tem a vantagem de retornar única o endereço IP na forma textual. Há também versões para:
Escolha o formato que é mais fácil para você analisar.
Você não precisa usar um arquivo php simplesmente usar um site que mostra o seu ip como ip-adress.com e, em seguida, obter o ip de lá com webrequest e use função GetBetween .
se divertir:)
Usando PHP que pode ser feito simplesmente:
Como "shaiss" compartilhou o código PHP, este é o código 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
Este é apenas um exemplo com:
1 - Formulário
1 - TextBox
1 - Button (s)
Espero que isso ajude!
Eu tive a mesma pergunta e procurou um pouco só para lembrar que eu posso fazer isso com 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 sub-rotina só é acionado quando você navegar para uma página web usando WebBrowser.Navigate()
.
O boolean gotIP
existe porque eu tenho uma outra sub-rotina que ativa em qualquer conclusão documento. Eu não quero que ele seja acionado mais de uma vez. Se você não estiver familiarizado com WebBrowser
, você verifique o suficiente certeza que a página é carregada com ReadyState
. Se você não fizer isso, você pode receber uma exceção (porque o conteúdo não está carregado).
Você pode usar qualquer site que você gosta. Este site é bom, pois coloca o seu endereço de IP no título. Isso é bom porque não vai ser um tag title
. No caso de você não pode usar este site (ou um que tem uma tag única, com o seu conteúdo dentro dele), use um loop For Each
.
For Each instance As HtmlElement In activeProjectsWB.Document.GetElementsByTagName("InsertTagHere")
'do something to find the tag that contains your IP address
Next