Get „echte“ IP-Adresse mit VB.NET?
Frage
Ich suche nach einer Funktion, die mir meine echte IP geben, nicht mein lokalen IP. die Funktion i zur Zeit hat, gibt die IP in Netzwerk- und Freigabecenter, das ist 192.168.2.100 Aber wenn ich gehe zu whatismyip, dann gibt es meine echte IP.
Wie kann ich dies mit VB.NET? Dank
Lösung
Es gibt keinen Weg, dies nur mit VB.Net zu tun. Sie brauchen eine Website zu finden, die Sie (vielleicht eines Ihrer eigenen?) Wird zeigen, oder Sie müssen mit dem Router verbinden.
Wenn Sie eine Website haben, die laufen jede Art von Webseite-Anwendungen geeignet ist, können Sie eine Webseite erstellen, die einfach die Kunden gibt (wie im Computer auf die Seite Verbindungs) IP-Adresse.
Ich habe eine meiner eigenen:
http://etoys.netortech.com/devpages/ip.asp
Obwohl ich kann nicht garantieren, es wird immer da sein weshalb sollten Sie Ihre eigenen.
Von dort ist es eine einfache Sache, eine HttpWebRequest die zum Download Inhalt der Seite.
Andere Tipps
die Antworten zu kombinieren oben“ Erstellen Sie eine PHP-Datei und fügen Sie diese in ihm:
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
als curip.php speichern und auf Ihren Server hochladen.
In Ihrem VB.net Projekt erstellen ein Modul. Deklarieren Sie den Einfuhren Abschnitt an der Spitze
Imports System.Net
Imports System.IO
Und erstellen Sie Ihre Funktion:
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
Jetzt überall in Ihrem Code können Sie den Befehl
Dim myIP = GetIP()
als den Wert von dort verwenden, wie Sie wollen.
Ich bin wahrscheinlich nur crotchety hier zu sein, aber ich kann nicht umhin zu denken, dass Ihre „echte“ IP-Adresse derjenige von ifconfig (ipconfig) auf dem lokalen Computer zurückgegeben wird. 192.168.2.100 in Ihrem Fall. Unabhängig von NAT-Übersetzung oder Tunneln geht zwischen Ihnen und dem Remote-Endpunkt sollte keine Rolle spielen, und wenn ja, gibt es eine gute Chance, Sie etwas zu tun, die Ihre Anwendung nur in der aktuellen Umgebung arbeiten machen könnten.
Ich mochte eine öffentlich zugängliche Website benutzen, die Adresse als Antwort Ihrer öffentlichen IP zurück.
Die wichtigsten Faktoren sind hier:
- Verfügbarkeit des Dienstes. Ihren eigenen Dienst ausgeführt werden garantiert die volle Kontrolle über das System und das Wissen, wenn es verfügbar ist, und wenn es nicht ist. Aber in einigen Fällen kann es einfach zu viel Arbeit für eine so einfache Aufgabe sein.
- Minimierung zusätzliche Unordnung in der Antwort enthalten. Es gibt viele Websites, so dass Sie Ihre öffentliche IP-Adresse zu bekommen, aber sie tun es oft, dass in Form einer HTML-Seite. das kleine Fragment der Seite Extrahieren der IP-Adresse enthält möglicherweise zusätzlichen Code benötigen.
Unter Berücksichtigung der Tatsache diese beiden Faktoren würde ich diese URL empfehlen: http://wtfismyip.com/text Es hat den Vorteil, Rückkehr nur die IP-Adresse in Textform. Es gibt auch Versionen für:
Wählen Sie das Format, das für Sie einfacher zu analysieren.
Sie brauchen nicht eine PHP-Datei zu verwenden, nur eine Website, die Ihre IP wie ip-adress.com zeigt und dann von dort die IP bekommen mit webrequest und dann mit GetBetween Funktion.
hat Spaß:)
Mit PHP kann es einfach getan werden:
Als "shaiss" den PHP-Code gemeinsam genutzt, ist dies der VB.net Code:
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
Dies ist nur ein Beispiel mit:
1 - Form
1 - TextBox
1 - Taste (n)
Hope, das hilft!
hatte ich die gleiche Frage und suchte nur ein bisschen daran zu erinnern, dass ich dies mit WebBrowser tun können!
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
nur Dieses Unterprogramm ausgelöst wird, wenn Sie auf eine Webseite mit WebBrowser.Navigate()
navigieren.
Die gotIP
boolean existiert, weil ich ein anderes Unterprogramm haben, das auf jedem Dokument Abschluss aktiviert. Ich will nicht mehr als einmal ausgelöst werden. Wenn Sie mit WebBrowser
nicht vertraut sind, überprüfen Sie die Web-Seite stellen Sie sicher, mit ReadyState
genug geladen. Wenn Sie dies nicht tun, können Sie eine Ausnahme erhalten (weil Inhalt nicht geladen wird).
Sie können mit je nachdem, welche Seite Sie möchten. Diese Seite ist gut, weil es Ihre IP-Adresse in dem Titel steckt. Das ist gut, weil es geht um einen title
-Tag sein. Für den Fall, können Sie diese Website nicht nutzen (oder eine, die einen einzigartigen Tag mit dem Inhalt in sich hat), verwenden Sie eine For Each
Schleife.
For Each instance As HtmlElement In activeProjectsWB.Document.GetElementsByTagName("InsertTagHere")
'do something to find the tag that contains your IP address
Next