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

Foi útil?

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:

  1. 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.
  2. 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top