Ich weiß, die erste Reaktion auf diese Frage ist "nein" und "es kann nicht gemacht werden" und "du solltest es nicht brauchen, du machst etwas falsch". Ich versuche, die LAN-IP-Adresse des Benutzers abzurufen und auf der Webseite anzuzeigen. Warum? Denn genau darum geht es auf der Seite, an der ich arbeite, und es werden so viele Informationen wie möglich über Sie, den Besucher, angezeigt: http://www.whatsmyip.org/more-info-about-you/
Ich mache also eigentlich nichts mit der IP, außer sie dem Benutzer zu Informationszwecken zu zeigen. Früher habe ich dazu ein kleines Java-Applet verwendet. Es hat ziemlich gut funktioniert. Aber heutzutage bringt Sie der Browser dazu, so oft zuzustimmen und zu vertrauen, dass Sie selbst das kleinste Java-Applet ausführen, dass ich lieber gar kein Applet ausführen möchte.
Also habe ich diese Funktion für eine Weile einfach losgeworden, aber ich würde sie gerne zurückhaben, wenn möglich. Es war etwas, das ich als Computerberater von Zeit zu Zeit tatsächlich benutzte. Auf dieser Website können Sie schneller feststellen, in welchem IP-Bereich ein Netzwerk ausgeführt wird, als in den Systemeinstellungen, im Netzwerk und in der jeweils aktiven Schnittstelle.
Ich frage mich also und hoffe, ob es eine Möglichkeit gibt, dies allein in Javascript zu tun. Möglicherweise können Sie auf ein neues Objekt zugreifen, ähnlich wie Javascript den Browser fragen kann, wo sich der geografische Standort auf der Erde befindet. Vielleicht gibt es etwas Ähnliches für Client-Netzwerkinformationen? Wenn nicht, gibt es vielleicht einen ganz anderen Weg, dies zu tun? Ich kann mir nur ein Java-Applet oder ein Flash-Objekt vorstellen. Ich würde beides lieber nicht tun.
quelle
HTTP_X_FORWARDED_FOR
auf dieser Seite erfasst.Antworten:
Wie sich herausstellt, ermöglicht die aktuelle WebRTC-Erweiterung von HTML5, dass Javascript die lokale Client-IP-Adresse abfragt. Ein Proof of Concept finden Sie hier: http://net.ipcalf.com
Diese Funktion ist anscheinend beabsichtigt und kein Fehler. Aufgrund seiner kontroversen Natur wäre ich jedoch vorsichtig, mich auf dieses Verhalten zu verlassen. Trotzdem denke ich, dass es perfekt und angemessen auf Ihren beabsichtigten Zweck eingeht (dem Benutzer zu zeigen, was sein Browser leckt).
quelle
Aktualisieren
Diese Lösung würde nicht mehr funktionieren, da Browser das Webrtc-Leck beheben: Weitere Informationen hierzu finden Sie in der folgenden Frage: RTCIceCandidate gibt keine IP mehr zurück
Zusätzlich zur Antwort von afourney funktioniert dieser Code in Browsern, die WebRTC (Chrome und Firefox) unterstützen. Ich habe gehört, dass es eine Bewegung gibt, die eine Funktion implementiert, mit der Websites die IP anfordern (wie im Fall des geografischen Standorts oder der Benutzermedien des Benutzers), obwohl sie in keinem dieser Browser noch implementiert werden muss.
Hier ist eine modifizierte Version des Quellcodes , die die Zeilen reduziert und keine Betäubungsanforderungen stellt, da Sie nur die lokale IP und nicht die öffentliche IP möchten:
Wir erstellen eine Dummy-Peer-Verbindung, über die der Remote-Peer Kontakt mit uns aufnehmen kann. Wir tauschen im Allgemeinen Eiskandidaten miteinander aus und lesen die Eiskandidaten, die wir der IP des Benutzers mitteilen können.
Eine Demo finden Sie unter -> Demo
quelle
Die WebRTC-API kann verwendet werden, um die lokale IP des Clients abzurufen.
Der Browser unterstützt es jedoch möglicherweise nicht oder der Client hat es aus Sicherheitsgründen deaktiviert. Auf jeden Fall sollte man sich langfristig nicht auf diesen "Hack" verlassen, da er wahrscheinlich in Zukunft gepatcht wird (siehe die Antwort von Cullen Fluffy Jennings).
Der folgende ECMAScript 6-Code zeigt, wie das geht.
Beachten Sie, dass ich schreibe
return resolve(..)
oderreturn reject(..)
als Abkürzung. Beide Funktionen geben nichts zurück.Dann haben Sie vielleicht Folgendes:
quelle
Ich habe Midos Post aufgeräumt und dann die gefundene Funktion aufgeräumt. Dies wird entweder zurückkehren
false
oder einarray
. Denken Sie beim Testen daran, dass Sie das Array in der Webentwicklerkonsole reduzieren müssen, da Sie sonst aufgrund seines nicht intuitiven Standardverhaltens möglicherweise glauben, dass es ein leeres Array zurückgibtarray
.Denken Sie außerdem daran, dass dies kein Alt-Neu- System wie CSS ist,
border-radius
obwohl eines dieser Elemente von IE11 und älteren Versionen überhaupt nicht unterstützt wird. Verwenden Sie immer die Objekterkennung, testen Sie in einigermaßen älteren Browsern (z. B. Firefox 4, IE9, Opera 12.1) und stellen Sie sicher, dass Ihre neueren Skripte Ihre neueren Codebits nicht beschädigen. Zusätzlich immer Standards konformen Code erkennt zuerst so , wenn es etwas mit sagen , ein CSS - Präfix erkennt den Standard nicht-gelegten Code ist zuerst und dann zurückfallen , wie die langfristige Unterstützung wird schließlich für den Rest davon Existenz standardisiert werden.quelle
ip
- Zeile 3 und Zeile 8.<input name="example1" type="hidden" value="whatever" />
einer solchen Situation können Sie einen AJAX POST verwenden oder verwenden. Ich empfehle dringend, meineajax()
Funktion hier zu studierenquelle
Chrome 76+
Letztes Jahr habe ich Linblows Antwort (19.10.2018) verwendet, um meine lokale IP über Javascript erfolgreich zu ermitteln. Die jüngsten Chrome-Updates (76?) Haben diese Methode jedoch so verbessert, dass sie jetzt eine verschleierte IP-Adresse zurückgibt, z.
1f4712db-ea17-4bcf-a596-105139dfd8bf.local
Wenn Sie die volle Kontrolle über Ihren Browser haben, können Sie dieses Verhalten rückgängig machen, indem Sie es in Chrome Flags deaktivieren und in Ihre Adressleiste eingeben:
und Deaktivieren der Flagge
Anonymize local IPs exposed by WebRTC
In meinem Fall benötige ich die IP für ein TamperMonkey-Skript, um meinen aktuellen Standort zu bestimmen und je nach Standort verschiedene Aktionen auszuführen. Ich habe auch die volle Kontrolle über meine eigenen Browsereinstellungen (keine Unternehmensrichtlinien usw.). Für mich reicht es also aus, die
chrome://flags
Einstellung zu ändern .Quellen:
https://groups.google.com/forum/#!topic/discuss-webrtc/6stQXi72BEU
https://codelabs.developers.google.com/codelabs/webrtc-web/index.html
quelle
Weitere Informationen darüber, welche Einschränkungen Browser wahrscheinlich hinzufügen werden, um dies zu mildern, und was IETF dagegen unternimmt und warum dies bei IETF SPEC zur IP-Verarbeitung erforderlich ist
quelle
Ein
RTCPeerConnection
kann verwendet werden. In Browsern wie Chrome, in denen einegetUserMedia
Berechtigung erforderlich ist , können wir nur verfügbare Eingabegeräte erkennen und anfordern.quelle