2016-07-31 59 views
-2

我见过几种在.NET中检索外部IP地址的方法;我想知道的是,所有通常的变量都是相同的(互联网连接速度等),最快的代码用于获取您的外部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

有没有人带到运行自己的测试,以得到fastes时间t方法?

回答

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) 
+0

有趣。我使用Google作为源,因为它可能更有可能在将来“永远在那里”,而不是随时可能消失的网站。我看到很多IP网站都会离开,破坏你的应用程序。但我确实理解从一个页面获取信息的概念,该页面不包含大量其他源代码来解析。 –

+0

我同意您对服务可用性的担忧。我将该网址保存在配置文件中以便于维护/更改 – Steve

+0

如果只有Google会为我们提供一个简单的IP信息页面。 =) –

相关问题