Lokale IP-Adresse des Clients herausfinden

Begonnen von Prof. Dr. Peter Henning, 24 Juli 2025, 17:55:51

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Für viele FHEM-Anwendungen kann es interessant sein, die lokale IP-Adresse eines Clients herauszufinden, der auf FHEM zugreift. Früher ging das z.B. über WebRTC. Mit dem Einbau zusätzlicher Sicherheitsfeatures in Browser und Server ist der Weg aber verschlossen. Hier ein gut funktionierender Vorschlag.

1. Der folgende einfache Code wird auf einem Rechner mit node.js installiert, z.B. in der Datei /opt/fhem/ip-server.js: const http = require('http');

const server = http.createServer((req, res) => {
  const ip = req.socket.remoteAddress
    .replace(/^.*:/, '')
    .replace(/^::ffff:/, '');

  res.writeHead(200, {
    'Content-Type': 'application/json',
    'Access-Control-Allow-Origin': '*'
  });

  res.end(JSON.stringify({ ip }));
});

server.listen(8089, () => {
  console.log("IP-Server läuft mit CORS auf Port 8089");
});

2. Mit /usr/bin/node /opt/fhem/ip-server.js
wird der Server gestartet, optional geht das natürlich auch als service.

3. Von außen (also z.B. aus einem FHEM-Modul) lässt sich die lokale IP-Adresse des Clients dann durch eine einfache Anfrage beim Server erhalten. Angenommen, der oben genannte Server läuft auf 192.168.194, so kann man verwenden //------------------------------------------------------------------------------------------------------
// Determine private IP from Server 0.194
//------------------------------------------------------------------------------------------------------
var localIP = "";
var localDev;
var localHome;
var localFTUI;

async function getLocalIP() {
    try {
        const res = await fetch("http://192.168.0.194:8089");
        const data = await res.json();
        localIP = data.ip || "unbekannt";
        window.localIP = localIP;
        (hier ggf. Funktionsaufruf zum Verarbeiten der Adresse)
    }
    catch (err) {
        localIP = "Fehler";
        alert("Fehler beim Abrufen der IP: " + err);
    }
}

getLocalIP();


LG

pah