Ich muss irgendwie die IP-Adresse des Clients mit JavaScript abrufen; kein serverseitiger Code, nicht einmal SSI.
Ich habe jedoch nichts gegen die Verwendung eines kostenlosen Skripts/Dienstes eines Drittanbieters.
Ich muss irgendwie die IP-Adresse des Clients mit JavaScript abrufen; kein serverseitiger Code, nicht einmal SSI.
Ich habe jedoch nichts gegen die Verwendung eines kostenlosen Skripts/Dienstes eines Drittanbieters.
Wie kürzlich in einem neuen Github-Repository gezeigt wurde, webrtc-ip können Sie jetzt die Daten eines Benutzers durchsickern lassen. öffentlich IP-Adresse über WebRTC. Leider funktioniert dieses Leck nicht für private IPs, aufgrund der schrittweisen Umstellung auf mDNS (zumindest für WebRTC), vollständig erklärt aquí . Hier ist jedoch eine funktionierende Demo:
getIPs().then(res => document.write(res.join('\n')))
<script src="https://cdn.jsdelivr.net/gh/joeymalvinni/webrtc-ip/dist/bundle.dev.js"></script>
Den kompilierten Quellcode für dieses Repository finden Sie unter aquí .
(Bisher) Letzte Aktualisierung
Diese Lösung würde nicht mehr funktionieren, weil die Browser webrtc Leck zu beheben: für weitere Informationen über die lesen Sie diese andere Frage: RTCIceCandidate liefert keine IP mehr
Update : Ich wollte schon immer eine minimale / uglified Version des Codes zu machen, so ist hier ein ES6 Promise Code:
var findIP = new Promise(r=>{var w=window,a=new (w.RTCPeerConnection||w.mozRTCPeerConnection||w.webkitRTCPeerConnection)({iceServers:[]}),b=()=>{};a.createDataChannel("");a.createOffer(c=>a.setLocalDescription(c,b,b),b);a.onicecandidate=c=>{try{c.candidate.candidate.match(/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g).forEach(r)}catch(e){}}})
/*Usage example*/
findIP.then(ip => document.write('your ip: ', ip)).catch(e => console.error(e))
Nota: Dieser neue reduzierte Code würde nur eine einzige IP zurückgeben, wenn Sie alle IPs des Benutzers wollen (was je nach Netzwerk mehr sein könnte), verwenden Sie den ursprünglichen Code...
dank WebRTC ist es sehr einfach, die lokale IP in WebRTC-unterstützten Browsern zu erhalten (zumindest im Moment). Ich habe den Quellcode geändert, die Zeilen reduziert, keine Stun-Anforderungen, da Sie nur lokale IP, nicht die öffentliche IP wollen, der unten stehende Code funktioniert in den neuesten Firefox und Chrome, führen Sie einfach das Snippet und überprüfen Sie selbst:
function findIP(onNewIP) { // onNewIp - your listener function for new IPs
var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
var pc = new myPeerConnection({iceServers: []}),
noop = function() {},
localIPs = {},
ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
key;
function ipIterate(ip) {
if (!localIPs[ip]) onNewIP(ip);
localIPs[ip] = true;
}
pc.createDataChannel(""); //create a bogus data channel
pc.createOffer(function(sdp) {
sdp.sdp.split('\n').forEach(function(line) {
if (line.indexOf('candidate') < 0) return;
line.match(ipRegex).forEach(ipIterate);
});
pc.setLocalDescription(sdp, noop, noop);
}, noop); // create offer and set local description
pc.onicecandidate = function(ice) { //listen for candidate events
if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
};
}
var ul = document.createElement('ul');
ul.textContent = 'Your IPs are: '
document.body.appendChild(ul);
function addIP(ip) {
console.log('got ip: ', ip);
var li = document.createElement('li');
li.textContent = ip;
ul.appendChild(li);
}
findIP(addIP);
<h1> Demo retrieving Client IP using WebRTC </h1>
Was hier passiert, ist, dass wir eine Dummy-Peer-Verbindung aufbauen, und damit die Gegenstelle mit uns Kontakt aufnehmen kann, tauschen wir im Allgemeinen Eiskandidaten untereinander aus. Durch Auslesen der Eiskandidaten (aus der lokalen Sitzungsbeschreibung und dem onIceCandidateEvent) können wir die IP des Benutzers ermitteln.
wo ich den Code entnommen habe --> Quelle
Das können Sie, indem Sie es über die Serverseite mit JSONP weiterleiten
Und beim Googeln nach einer solchen fand ich sie hier auf SO Kann ich einen DNS-Lookup (Hostname zu IP-Adresse) mit clientseitigem Javascript durchführen?
<script type="application/javascript">
function getip(json){
alert(json.ip); // alerts the ip address
}
</script>
<script type="application/javascript" src="http://www.telize.com/jsonip?callback=getip"></script>
Anmerkung: Die telize.com API hat dauerhaft seit dem 15. November 2015 abgeschaltet .
Die meisten Antworten hier "umgehen" die Notwendigkeit von serverseitigem Code durch... den Server eines anderen Benutzers angreifen. Das ist eine absolut gültige Technik, es sei denn, Sie tatsächlich benötigen um die IP-Adresse zu erhalten, ohne einen Server zu treffen.
Traditionell war dies ohne eine Art Plugin nicht möglich (und selbst dann würden Sie wahrscheinlich die falsch IP-Adresse, wenn Sie sich hinter einem NAT-Router befinden), aber mit dem Aufkommen von WebRTC ist es tatsächlich möglich, dies zu tun... Wenn die Sie anstreben Browsern, die WebRTC unterstützen (derzeit: Firefox, Chrome und Opera).
Bitte lesen Sie die Antwort von mido für Details, wie Sie nützliche Client-IP-Adressen mit WebRTC abrufen können.
Überprüfen Sie http://www.ipify.org/
Sie sind der Meinung:
- Sie können es verwenden ohne Limit (selbst wenn Sie Millionen von Anfragen pro Minute bearbeiten).
- ipify ist vollständig quelloffen (sehen Sie sich die GitHub-Repository ).
Hier ist ein funktionierendes JS-Beispiel (anstatt sich zu wundern, warum diese Antwort so wenige Stimmen hat, versuchen Sie es selbst, um es in Aktion zu sehen):
<script>
function getIP(json) {
alert("My public IP address is: " + json.ip);
}
</script>
<script src="https://api.ipify.org?format=jsonp&callback=getIP"></script>
Zu faul zum Kopieren/Einfügen? Ich mag es. Hier ist eine Demo
Zu faul zum Klicken? :O
Note : Schalten Sie Adblock Plus / uBlock & Co aus, bevor Sie die Demo starten sonst funktioniert sie nicht.
Ich habe nichts mit dem IPify-Team zu tun. Ich finde es einfach lächerlich cool, dass jemand einen solchen Service für das Allgemeinwohl anbietet.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.