Получить «реальный» IP-адрес с VB.NET? - PullRequest
4 голосов
/ 07 августа 2009

Я ищу функцию, которая выдаст мне мой настоящий IP, а не мой локальный IP. функция, которую я в настоящее время имею, возвращает IP в сети и центре совместного использования, который является 192.168.2.100 Но если я перейду на whatismyip, то это даст мой реальный IP.

Как я могу получить это, используя VB.NET? спасибо

Ответы [ 7 ]

5 голосов
/ 15 августа 2009

Объединить ответы выше " Создайте файл php и вставьте в него:

<?php
echo $_SERVER['REMOTE_ADDR'];
?>

сохраните его как curip.php и загрузите на свой сервер.

В вашем проекте VB.net создайте модуль. Объявите раздел импорта в самом верху

Imports System.Net
Imports System.IO

И создайте свою функцию:

    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

Теперь в любом месте вашего кода вы можете выдать

Dim myIP = GetIP()

как использовать значение оттуда, как вы хотите.

4 голосов
/ 07 августа 2009

Нет способа сделать это только с VB.Net. Вам нужно найти веб-сайт, на котором вам сообщат (возможно, один из ваших?) Или вам нужно связаться с вашим маршрутизатором.

Если у вас есть веб-сайт, на котором можно запускать любые приложения веб-страниц, вы можете создать веб-страницу, которая просто выводит IP-адрес клиента (как на компьютере, подключающемся к странице).

У меня есть один из моих:

http://etoys.netortech.com/devpages/ip.asp

Хотя я не могу гарантировать, что это будет всегда, поэтому вы должны сделать свой собственный.

Оттуда очень просто использовать HttpWebRequest для загрузки содержимого страницы.

1 голос
/ 13 января 2013

Я бы использовал общедоступный сайт, который возвращает ваш публичный IP-адрес в ответ.

Ключевые факторы здесь:

  1. Наличие услуги. Запуск собственного сервиса гарантирует полный контроль над ним и знание того, когда он доступен, а когда нет. Но в некоторых случаях это может быть слишком много работы для такой простой задачи.
  2. Минимизация дополнительных помех, содержащихся в ответе. Существует множество сайтов, позволяющих вам получить ваш публичный IP-адрес, но они часто делают это в виде HTML-страницы. Для извлечения небольшого фрагмента страницы, содержащей IP-адрес, может потребоваться дополнительный код.

Имея в виду эти два фактора, я бы порекомендовал этот URL: http://wtfismyip.com/text Он имеет преимущество в том, что возвращает only IP-адрес в текстовом виде. Есть также версии для:

Выберите формат, который вам легче разобрать.

1 голос
/ 15 августа 2009

Я, наверное, просто капризничаю, но не могу не думать, что ваш "реальный" IP-адрес - это тот, который возвращает ifconfig (ipconfig) на вашем локальном компьютере. 192.168.2.100 в вашем случае. Независимо от того, происходит ли трансляция или туннелирование NAT между вами и удаленной конечной точкой, это не имеет значения, и если это имеет значение, есть большая вероятность, что вы делаете что-то, что может заставить ваше приложение работать только в вашей текущей среде.

0 голосов
/ 06 июня 2015

У меня был тот же вопрос, и я немного искал, чтобы вспомнить, что я могу сделать это с помощью 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

Эта подпрограмма запускается только при переходе на веб-страницу с использованием WebBrowser.Navigate().

Логическое значение gotIP существует, потому что у меня есть другая подпрограмма, которая активируется при любом завершении документа. Я не хочу, чтобы это срабатывало более одного раза. Если вы не знакомы с WebBrowser, убедитесь, что веб-страница достаточно загружена с ReadyState. Если вы этого не сделаете, вы можете получить исключение (потому что контент не загружен).

Вы можете использовать любой понравившийся вам сайт. Этот сайт хорош, потому что он помещает ваш IP-адрес в заголовок. Это хорошо, потому что будет один title тег. Если вы не можете использовать этот сайт (или сайт, содержащий уникальный тег с вашим контентом), используйте цикл For Each.

                For Each instance As HtmlElement In activeProjectsWB.Document.GetElementsByTagName("InsertTagHere")
                    'do something to find the tag that contains your IP address
                Next
0 голосов
/ 14 февраля 2015

С помощью PHP это можно сделать просто:

Поскольку "shaiss" поделился кодом PHP, это код 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

Это просто пример с:

1 - Форма

1 - TextBox

1 - кнопка (и)

Надеюсь, это поможет!

0 голосов
/ 13 января 2013

Вам не нужно использовать php-файл, просто используйте сайт, который показывает ваш ip, например ip-adress.com, а затем получите ip оттуда с помощью веб-запроса и затем используйте функцию GetBetween .

веселись :) 1005 *

...