2016-07-31 61 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信息頁面。 =) –

相關問題