我见过几种在.NET中检索外部IP地址的方法;我想知道的是,所有常见的变量都是相同的(互联网连接速度等),获取外部IP地址的最快代码是什么?
这是迄今为止我见过的最快的:
Private Function GetExternalIP() As String
Dim m As Match = Match.Empty
Try
Dim wClient As New System.Net.WebClient
Dim strURL As String = wClient.DownloadString("https://www.google.com/search?q=my+ip")
Dim strPattern As String = "\b(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\b"
' Look for the IP
m = Regex.Match(strURL, strPattern)
Catch ex As Exception
Debug.WriteLine(String.Format("GetExternalIP Error: {0}", ex.Message))
End Try
' Failed getting the IP
If m.Success = False Then Return "IP: N/A"
' Got the IP
Return m.value
End Function
我知道还有其他方法可以获取外部IP,即使用WebBrowser
控件获取报告IP的页面,然后从结果中解析它,甚至是某些命令行方法,如摆弄:
nslookup myip.opendns.com. resolver1.opendns.com
有没有人花时间运行自己的测试来获得最快的方法?
答案 0 :(得分:1)
很难对任何询问“最快方式”的问题给出绝对答案。此外,在这种情况下,问题不仅在于所使用的代码,还在于网络的延迟以及在有限时间内执行了多少次尝试。如果某些服务器看到很多此类请求来自同一地址,则可能会停止响应。 (DoS攻击来到minf)
然而,对您的代码稍作改进可能是尝试使用不同的服务来返回有关ip的裸机信息而不是其他许多不相关的信息
Dim wbc = New WebClient()
Dim externalIP = wbc.DownloadString("http://www.realip.info/api/p/realip.php")
externalIP = (New Regex("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")).
Matches(externalIP)(0).ToString()
运行此代码100次会让我经过28秒,而您尝试使用谷歌会给我34秒。但正如我所说,你需要从你的位置进行测试。
修改强>
使用http://checkip.amazonaws.com,我们可以完全绕过正则表达式解析器并使用IPAddress类。现在循环(100次)似乎更快(再次,我认为它在很大程度上取决于服务器的响应时间)
Dim externalIP = wbc.DownloadString("http://checkip.amazonaws.com")
Dim ip = New IPAddress(externalIP.Split("."c).Select(Function(x) Convert.ToByte(x)).ToArray)