我正在寻找一个功能,它将给我我的真实 IP,而不是我的本地 IP。我目前拥有的功能,返回网络和共享中心的 ip,即 192.168.2.100 但是如果我去 whatismyip,那么它会给出我的真实 IP。
我怎么能用 VB.NET 得到这个?谢谢
结合上面的答案”创建一个 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()
随心所欲地使用那里的价值。
仅使用 VB.Net 无法做到这一点。您需要找到一个可以告诉您的网站(可能是您自己的网站?),或者您需要与路由器交互。
如果您有一个能够运行任何类型的网页应用程序的网站,您可以创建一个网页,该网页仅输出客户端(如连接到该页面的计算机)的 IP 地址。
我有我自己的一个:
http://etoys.netortech.com/devpages/ip.asp
虽然我不能保证它会一直在那里,这就是为什么你应该自己做。
从那里使用HttpWebRequest下载页面内容是一件简单的事情。
我可能只是在这里胡说八道,但我不禁认为您的“真实”IP 地址是您本地计算机上的 ifconfig (ipconfig) 返回的地址。192.168.2.100 在你的情况下。无论您和远程端点之间发生什么 NAT 转换或隧道,都无关紧要,如果确实如此,那么您很有可能正在做一些可以使您的应用程序仅在当前环境中工作的事情。
我会使用一个公开的站点,它会返回您的公共 IP 地址作为响应。
这里的关键因素是:
记住这两个因素,我会推荐这个 URL:http ://wtfismyip.com/text它的优点是只返回文本形式的 IP 地址。还有以下版本:
选择更容易解析的格式。
您不需要使用 php 文件,只需使用显示您的 ip 的站点,例如 ip-adress.com,然后使用 webrequest 从那里获取 ip,然后使用GetBetween函数。
玩得开心 :)
使用 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
循环。
For Each instance As HtmlElement In activeProjectsWB.Document.GetElementsByTagName("InsertTagHere")
'do something to find the tag that contains your IP address
Next