用VB.NET获取“真正的”IP地址?

时间:2009-08-07 01:40:20

标签: vb.net ip

我正在寻找能够提供真正IP的功能,而不是我的本地IP。我目前拥有的功能,返回网络中的IP和共享中心192.168.2.100 但如果我去了whatismyip,那么它就会给我真正的IP。

我怎么能用VB.NET搞定这个? 感谢

7 个答案:

答案 0 :(得分: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()

使用你想要的值。

答案 1 :(得分:4)

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

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

我有自己的一个:

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

虽然我不能保证它会永远存在,这就是为什么你应该自己做的。

从那里可以轻松使用HttpWebRequest下载页面内容。

答案 2 :(得分:1)

我可能只是在这里喋喋不休,但我不禁想到你的“真正的”IP地址是你本地机器上的ifconfig(ipconfig)返回的IP地址。在你的情况下192.168.2.100。无论您与远程端点之间的NAT转换或隧道连接都无关紧要,如果确实如此,您很可能会做一些可能使您的应用程序仅在您当前环境中工作的事情。

答案 3 :(得分:1)

我会使用一个公开的网站来回复您的公共IP地址。

这里的关键因素是:

  1. 服务的可用性。运行您自己的服务可确保对其进行完全控制,并了解何时可用以及何时不可用。但在某些情况下,这样一个简单的任务可能只是太多的工作。
  2. 最大限度地减少响应中包含的其他混乱。有很多站点允许您获取公共IP地址,但它们通常以HTML页面的形式执行此操作。提取包含IP地址的页面的小片段可能需要额外的代码。
  3. 请注意这两个因素我建议使用此网址:http://wtfismyip.com/text它的优点是只能以文本形式返回 IP地址。还有以下版本:

    选择更易于解析的格式。

答案 4 :(得分:0)

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

玩得开心:)

答案 5 :(得分:0)

使用PHP可以简单地完成:

As&#34; shaiss&#34;共享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 - 按钮

希望这有帮助!

答案 6 :(得分: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
相关问题