4

我正在寻找一个功能,它将给我我的真实 IP,而不是我的本地 IP。我目前拥有的功能,返回网络和共享中心的 ip,即 192.168.2.100 但是如果我去 whatismyip,那么它会给出我的真实 IP。

我怎么能用 VB.NET 得到这个?谢谢

4

7 回答 7

5

结合上面的答案”创建一个 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()

随心所欲地使用那里的价值。

于 2009-08-14T23:25:32.403 回答
4

仅使用 VB.Net 无法做到这一点。您需要找到一个可以告诉您的网站(可能是您自己的网站?),或者您需要与路由器交互。

如果您有一个能够运行任何类型的网页应用程序的网站,您可以创建一个网页,该网页仅输出客户端(如连接到该页面的计算机)的 IP 地址。

我有我自己的一个:

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

虽然我不能保证它会一直在那里,这就是为什么你应该自己做。

从那里使用HttpWebRequest下载页面内容是一件简单的事情。

于 2009-08-07T01:41:47.080 回答
1

我可能只是在这里胡说八道,但我不禁认为您的“真实”IP 地址是您本地计算机上的 ifconfig (ipconfig) 返回的地址。192.168.2.100 在你的情况下。无论您和远程端点之间发生什么 NAT 转换或隧道,都无关紧要,如果确实如此,那么您很有可能正在做一些可以使您的应用程序仅在当前环境中工作的事情。

于 2009-08-14T23:38:58.820 回答
1

我会使用一个公开的站点,它会返回您的公共 IP 地址作为响应。

这里的关键因素是:

  1. 服务的可用性。运行您自己的服务可以保证完全控制它并知道它何时可用,何时不可用。但在某些情况下,对于这样一个简单的任务来说可能工作量太大了。
  2. 尽量减少响应中包含的额外混乱。有很多网站允许您获取您的公共 IP 地址,但它们通常以 HTML 页面的形式进行。提取包含 IP 地址的页面的小片段可能需要额外的代码。

记住这两个因素,我会推荐这个 URL:http ://wtfismyip.com/text它的优点是返回文本形式的 IP 地址。还有以下版本:

选择更容易解析的格式。

于 2013-01-12T22:06:21.773 回答
0

您不需要使用 php 文件,只需使用显示您的 ip 的站点,例如 ip-adress.com,然后使用 webrequest 从那里获取 ip,然后使用GetBetween函数。

玩得开心 :)

于 2013-01-12T21:32:38.427 回答
0

使用 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 - 文本框

1 - 按钮

希望这可以帮助!

于 2015-02-14T03:57:31.800 回答
0

我有同样的问题,搜索了一下才记得我可以用 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
于 2015-06-06T05:37:57.060 回答