javascript - node js client ip




Node.js: ottieni l'IP del client (4)

req.connection.remoteAddress, req.headers ['x-forwarded-for'], req.ip, req.ips, cosa significa tutto ciò?

C'è un modo semplice per ottenere semplicemente l'indirizzo IP del client / user-agent che effettua la richiesta al mio sito in Node.js / Express? Non sto capendo tutte le cose del proxy o quali sono tutte le differenze tra tutte le proprietà dell'oggetto req. Inoltre, non capisco cosa sia l'opzione 'trust proxy' per Express.

Qualcuno potrebbe darmi una spiegazione diretta di quale sia la differenza tra tutte queste proprietà e di rispondere a come posso semplicemente ottenere l'IP del cliente?


Come altri hanno notato, a causa dell'uso potenziale dei proxy, si dovrebbe usare req.ip e NON usare l'intestazione X-Forwarded-For come molte persone raccomandano. Finché si configura correttamente un proxy come proxy fidato, req.ip restituirà sempre l'indirizzo IP dell'utente finale.

Ad esempio se avevi un proxy che si stava connettendo da 8.8.8.8, dovresti fare:

var express = require('express');
var app = express();
app.set('trust proxy', '8.8.8.8');

Dal momento che ci si fida del proxy, questo ora lo renderebbe in modo tale che ciò che viene passato nell'intestazione X-Forwarded-For verrà archiviato in req.ip, ma SOLO se proviene da uno dei proxy fidati.

Maggiori informazioni sul proxy di fiducia possono essere trovate qui .

Ora, come altri hanno notato nei commenti; specialmente quando si sviluppa localmente si può ottenere l'ip nel formato di ":: ffff: 127.0.0.1".

Per ottenere sempre l'indirizzo IPv4 che ho:

getClientAddress = function (req) {
        return req.ip.split(":").pop();
};

Ottenere l'IP del client è piuttosto semplice:

 var ip = req.headers['x-forwarded-for'] || 
     req.connection.remoteAddress || 
     req.socket.remoteAddress ||
     req.connection.socket.remoteAddress;
     console.log(ip);

req.ip è il modo semplice per ottenere l'indirizzo IP del client in Express. È possibile visualizzare la logica che utilizza (che implica l'acquisizione del primo elemento dall'array di indirizzi proxy req.ips , in cui tale matrice è costruita dagli header x-forwarded-for ) here .


// Get client IP address from request object ----------------------
getClientAddress = function (req) {
        return (req.headers['x-forwarded-for'] || '').split(',')[0] 
        || req.connection.remoteAddress;
};






express