428 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?

27voto

Bald Punkte 2016
  1. Ajouter app.set('trust proxy', true)
  2. Utilice req.ip o req.ips auf die übliche Weise

11voto

jtlindsey Punkte 3788

Dies ist nur eine zusätzliche Information für diese Antwort .

Wenn Sie Folgendes verwenden nginx würden Sie hinzufügen proxy_set_header X-Real-IP $remote_addr; zum Standortblock für den Standort. /etc/nginx/sites-available/www.example.com zum Beispiel. Hier ist ein Beispiel für einen Server-Block.

server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;

    location / {
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_pass http://127.0.1.1:3080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Nach dem Neustart nginx können Sie auf die IP-Adresse in Ihrem node / express Anwendungswege mit req.headers['x-real-ip'] || req.connection.remoteAddress;

9voto

Lorem Ipsum Punkte 91

Ich weiß, dass diese Frage bereits beantwortet wurde, aber so habe ich meine zum Laufen gebracht.

let ip = req.connection.remoteAddress.split(`:`).pop();

6voto

Oyetoke Tobi Punkte 148

Ich habe ein Paket für diesen Zweck geschrieben. Sie können es als Express-Middleware verwenden. Mein Paket ist hier veröffentlicht: https://www.npmjs.com/package/express-ip

Sie können das Modul installieren mit

npm i express-ip

Verwendung

const express = require('express');
const app = express();
const expressip = require('express-ip');
app.use(expressip().getIpInfoMiddleware);

app.get('/', function (req, res) {
    console.log(req.ipInfo);
});

5voto

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.

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