获得;“真正的”;VB.NET的IP地址?

获得;“真正的”;VB.NET的IP地址?,vb.net,ip,Vb.net,Ip,我正在寻找一个功能,将给我真正的IP,而不是我的本地IP。我当前拥有的函数返回网络和共享中心中的ip,即192.168.2.100 但如果我去whatismyip,那么它会给我真正的IP 如何使用VB.NET获取此信息? 谢谢仅仅用VB.Net是无法做到这一点的。你需要找到一个网站,告诉你(也许是你自己的?)或者你需要与你的路由器接口 如果您有一个能够运行任何类型的网页应用程序的网站,那么您可以创建一个只输出客户端(如连接到该网页的计算机)IP地址的网页 我有一个自己的: 虽然我不能保证它会一

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

如何使用VB.NET获取此信息?
谢谢

仅仅用VB.Net是无法做到这一点的。你需要找到一个网站,告诉你(也许是你自己的?)或者你需要与你的路由器接口

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

我有一个自己的:

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


从这里,只需使用a下载页面内容即可。

将上述答案结合起来。” 创建一个php文件并将其粘贴到其中:

<?php
echo $_SERVER['REMOTE_ADDR'];
?>
并创建您的函数:

    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()

正如您所希望的那样使用其中的值。

我可能只是在这里发脾气,但我忍不住认为您的“真实”IP地址是由ifconfig(ipconfig)返回的在您的本地计算机上。192.168.2.100在您的情况下。无论您和远程端点之间发生了什么NAT转换或隧道传输都不重要,如果是这样,您很有可能正在做一些事情,使您的应用程序只能在您当前的环境中工作。

您不需要使用php文件,只要使用一个像ip-adress.com一样ows您的ip,然后使用webrequest从那里获取ip,然后使用函数


玩得开心:)

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

这里的关键因素是:

  • 服务的可用性。运行您自己的服务可以保证对它的完全控制,并知道它何时可用,何时不可用。但在某些情况下,对于这样一个简单的任务来说,这可能是太多的工作了
  • 最小化响应中包含的额外混乱。有很多站点允许您获取公共IP地址,但它们通常以HTML页面的形式进行。提取包含IP地址的页面的小片段可能需要额外的代码
  • 考虑到这两个因素,我建议使用此URL:它的优点是只返回文本形式的IP地址。还有以下版本:

    • JSON:
    • XML:

    选择更易于解析的格式。

    使用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-按钮


    希望这能有所帮助!

    我也有同样的问题,搜索了一下,只为了记住我可以用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 instance As HtmlElement In activeProjectsWB.Document.GetElementsByTagName("InsertTagHere")
                        'do something to find the tag that contains your IP address
                    Next
    

    不熟悉php,但是您使用的脚本是否依赖于HTTP头来检索IP?如果是,用户可以操纵这些头来指定他们想要的IP地址。这可能不是一个很大的问题,但需要考虑。这是一个很好的观点。然而,唯一的方法是这样做,我可以想到sin当vb.net应用程序调用php文件时,用户必须使用代理服务器。但是,是的,应该考虑使用代理服务器的特定情况。
                    For Each instance As HtmlElement In activeProjectsWB.Document.GetElementsByTagName("InsertTagHere")
                        'do something to find the tag that contains your IP address
                    Next