2016-07-31 21 views
-2

Ich habe mehrere Methoden zum Abrufen Ihrer externen IP-Adresse in .NET gesehen; Was ich mich wundere ist, alle üblichen Variablen sind die gleichen (Internetverbindung Geschwindigkeit, etc.) Was ist die schnellste Code zum Abrufen Ihrer externen IP-Adresse?Was ist der absolut schnellste Weg, um externe IP-Adresse zu holen?

Hier ist die schnellste, die ich bisher gesehen habe:

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 

Ich weiß, es gibt auch andere Möglichkeiten, um die externe IP als auch, dh mit der WebBrowser Steuerung zu holen, eine Seite zu erhalten, die Ihre IP-Berichte und Parsen es dann aus den Ergebnissen oder auch mit einigen Befehlszeilenmethoden, wie das Hantieren:

nslookup myip.opendns.com. resolver1.opendns.com

Hat jemand schon einmal die Zeit genommen, um ihre eigenen Tests durchführen zu bekommen, die schnellsten t Methode?

Antwort

1

Es ist schwierig, auf jede Frage, die nach einem "schnellsten Weg" fragt, eine absolute Antwort zu geben. Darüber hinaus besteht das Problem in diesem Zusammenhang nicht nur in dem verwendeten Code, sondern auch in der Latenz des Netzwerks und darauf, wie viele Versuche in einer endlichen Zeit ausgeführt werden. Einige Server reagieren möglicherweise nicht mehr, wenn sie viele Anfragen dieser Art von derselben Adresse erhalten. (DoS-Attacken kommt MINF)

jedoch eine geringe Verbesserung auf Sie Code könnte sein, mit einem anderen Dienst, um zu versuchen, die einen nackten Knochen Informationen über die IP-Adresse bestehen und nicht viele andere unabhängige Informationen

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

Das Ausführen dieses Codes für 100 Mal gibt mir 28 verstrichene Sekunden, während Ihr Versuch gegen Google gibt mir 34 Sekunden. Aber wie gesagt, Sie müssen von Ihrem Standort aus testen.

EDIT:
http://checkip.amazonaws.com Verwendung und wir können völlig umgehen die regex-Parser und stattdessen die IPAddress-Klasse. Jetzt scheint die Schleife (100 mal) schneller (wieder, ich denke, es ist weitgehend abhängig von der Reaktionszeit des Servers)

+0

Interessant. Ich habe Google als Quelle verwendet, da es wahrscheinlich ist, dass es in Zukunft eher "immer da" sein wird, als eine Website, die jederzeit verschwinden könnte. Ich habe so viele IP-Sites gesehen, die einfach weggehen und deine App zerstören. Aber ich verstehe das Konzept, die Informationen von einer Seite zu bekommen, die nicht einen Haufen anderer Quellcodes enthält, um sie zu analysieren. –

+0

Ich stimme Ihren Bedenken bezüglich der Verfügbarkeit des Dienstes zu. Ich behalte diese URL in einer Konfigurationsdatei für einfache Wartung/Änderung – Steve

+0

Wenn nur Google uns eine einfache IP-Infoseite zur Verfügung stellen würde. =) –