423 Stimmen

Express.js: Wie erhalte ich die Adresse eines entfernten Clients?

Ich verstehe nicht ganz, wie ich die IP-Adresse eines entfernten Benutzers erhalten soll.

Nehmen wir an, ich habe eine einfache Anfrage wie die folgende:

app.get(/, function (req, res){
   var forwardedIpsStr = req.header('x-forwarded-for');
   var IP = '';

   if (forwardedIpsStr) {
      IP = forwardedIps = forwardedIpsStr.split(',')[0];  
   }
});

Ist der oben beschriebene Ansatz richtig, um die echte IP-Adresse des Benutzers zu ermitteln, oder gibt es einen besseren Weg? Und was ist mit Proxys?

4voto

In meinem Fall, ähnlich wie bei este Lösung zu finden, habe ich mich für Folgendes entschieden x-vorgesendet für Ansatz:

let ip = (req.headers['x-forwarded-for'] || '').split(',')[0];

x-forwarded-for Header fügt weiterhin die Route der IP vom Ursprung bis zum endgültigen Zielserver hinzu. Wenn Sie also die IP des Ursprungs-Clients abrufen müssen, wäre dies der erster Punkt des Arrays.

2voto

ile Punkte 1735

Das hat bei mir besser funktioniert als die anderen. Meine Websites sind hinter CloudFlare und es schien zu erfordern cf-connecting-ip .

req.headers['cf-connecting-ip'] || req.headers['x-forwarded-for'] || req.connection.remoteAddress

Wurde nicht getestet Express hinter Proxys da sie nichts darüber aussagt cf-connecting-ip Kopfzeile.

2voto

Bhulawat Ajay Punkte 267

Var ip = req.connection.remoteAddress;

ip = ip.split(':')[3];

2voto

Juan David Arce Punkte 537

Das Header-Objekt enthält alles, was Sie brauchen, Sie müssen nur dies tun:

var ip = req.headers['x-forwarded-for'].split(',')[0];

1voto

kakopappa Punkte 4925

Mit could-flare, nginx und x-real-ip Unterstützung

var user_ip;

    if(req.headers['cf-connecting-ip'] && req.headers['cf-connecting-ip'].split(', ').length) {
      let first = req.headers['cf-connecting-ip'].split(', ');
      user_ip = first[0];
    } else {
      let user_ip = req.headers['x-forwarded-for'] || req.headers['x-real-ip'] || req.connection.remoteAddress || req.socket.remoteAddress || req.connection.socket.remoteAddress;
    }

CodeJaeger.com

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.

Powered by:

X