Je les ai tous essayés, mais ça n'a pas marché,
console.log(clientIp);
console.log(req.ip);
console.log(req.headers['x-forwarded-for']);
console.log(req.connection.remoteAddress);
console.log(req.socket.remoteAddress);
console.log(req.connection.socket.remoteAddress.split(",")[0]);
Lorsque vous exécutez une application Express derrière un proxy, par exemple Nginx, vous devez définir la variable d'application trust proxy sur true. Express propose d'autres valeurs de trust proxy que vous pouvez consulter dans leur documentation, mais les étapes ci-dessous ont fonctionné pour moi.
- app.set('trust proxy', true) dans votre application Express.
app.set('trust proxy', true);
- Ajouter proxy_set_header X-Forwarded-For $remote_addr dans le Nginx pour votre bloc serveur.
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr; # this line
proxy_cache_bypass $http_upgrade;
}
- Vous pouvez maintenant lire l'adresse IP du client dans le fichier req.header('x-forwarded-for') ou req.connection.remoteAddress ; Code complet pour ipfilter
module.exports = function(req, res, next) {
let enable = true; // true/false
let blacklist = ['x.x.x.x'];
let whitelist = ['x.x.x.x'];
let clientIp = req.header('x-forwarded-for') || req.connection.remoteAddress;
if (!clientIp) {
return res.json('Error');
}
if (enable
&& paths.some((path) => (path === req.originalUrl))) {
let blacklist = blacklist || [];
if (blacklist.some((ip) => clientIp.match(ip) !== null)) {
return res.json({ status: 401, error: 'Your IP is black-listed !'});
}
let whitelist = whitelist || [];
if (whitelist.length === 0 || whitelist.some((ip) => clientIp.match(ip) !== null)) {
next();
return;
} else {
return res.json({ status: 401, error: 'Your IP is not listed !'});
}
}
next();
};
41 votes
Si vous utilisez Express, vous pouvez utiliser
req.ip
source - expressjs.com/fr/api.html#req.ip0 votes
Essayez ça : github.com/indutny/node-ip
51 votes
Pour ceux qui travaillent à partir de
localhost
- comme je l'ai fait, le résultat pour toutes les réponses ci-dessous (presque toutes les réponses fonctionnent) pourrait venir::1
. Cela m'a rendu confus pendant un certain temps. J'ai découvert plus tard que::1
est l'adresse IP réelle et estIPV6
pour localhost.Hope this helps someone