Подтвердить что ты не робот

Node.js: получить клиентский IP-адрес

req.connection.remoteAddress, req.headers ['x-forwarded-for'], req.ip, req.ips, что все это значит?

Есть ли прямой способ просто получить IP-адрес клиента/пользователя-агента, делающего запрос на мой сайт в Node.js/Express? Я не понимаю все прокси-материалы или все различия между всеми свойствами объекта req. Кроме того, я не понимаю, что такое "доверенный прокси" для Express.

Может кто-нибудь дать мне прямое объяснение тому, что разница между всеми этими свойствами, и ответить, как я могу просто получить IP-адрес клиента?

4b9b3361

Ответ 1

req.ip - это простой способ получить IP-адрес клиента в Express. Вы можете увидеть используемую им логику (которая включает захват первого элемента из массива прокси-адресов req.ips, где этот массив построен из заголовков x-forwarded-for) здесь.

Ответ 2

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

Ответ 3

очень просто

function getClientIP(req){
    return req.headers['x-forwarded-for'] || req.connection.remoteAddress;
}

Ответ 4

Как отмечали другие, из-за использования потенциального использования прокси, вы действительно должны использовать req.ip и НЕ использовать заголовок X-Forwarded-For, как это рекомендует многие люди. Пока вы правильно настроите прокси-сервер в качестве доверенного прокси, req.ip всегда будет возвращать IP-адрес конечного пользователя.

например. Если у вас был прокси-сервер, подключавшийся из 8.8.8.8, вы бы сделали:

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

Так как вы доверяете прокси-серверу, теперь это сделает так, что то, что передается в заголовке X-Forwarded-For, будет храниться в req.ip, но ТОЛЬКО, если оно происходит от одного из доверенных прокси.

Подробнее о доверенном прокси можно найти здесь.

Теперь, как отмечали другие в комментариях; особенно при разработке локально вы можете получить ip в формате ":: ffff: 127.0.0.1".

Чтобы всегда получать адрес IPv4, у меня есть:

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

Ответ 5

Получение IP-адреса клиента довольно просто:

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