Как узнать удаленный адрес в node.js, если это HTTPS-запрос? - PullRequest
5 голосов
/ 14 мая 2011

HI.в node.js, если это http-запрос, я могу получить remoteAddress по адресу req.connection.remoteAddress,

, так как его получить, если https-запрос?Я считаю, что есть req.socket.remoteAddress, но я не уверен.Пожалуйста посоветуй.спасибо.

Ответы [ 4 ]

17 голосов
/ 15 мая 2011

Кажется, что-то странное / сломанное действительно.Начиная с узла 0.4.7, http имеет удаленный адрес, доступный на:

  • req.connection.remoteAddress
  • req.socket.remoteAddress

вhttps, оба они не определены, но

  • req.connection.socket.remoteAddress

работает.Хотя это не доступно на http, так что вам нужно проверить внимательно.Я не могу представить, что такое поведение является преднамеренным.

9 голосов
/ 30 мая 2012

Поскольку поиск "express js ip" прямо указывает на это, это как-то уместно.

Express 3.0.0 alpha теперь предлагает новый способ получения IP-адресов для запросов клиентов. Просто используйте req.ip. Если вы занимаетесь прокси-игрой, вы можете быть заинтересованы в app.set("trust proxy", true); и req.ips.

Рекомендую прочитать всю дискуссию в Экспресс Группе Google .

4 голосов
/ 22 октября 2013
var ip = req.headers['x-forwarded-for'] || 
     req.connection.remoteAddress || 
     req.socket.remoteAddress ||
     req.connection.socket.remoteAddress;

Обратите внимание, что иногда вы можете получить более одного ip-адреса в req.headers ['x-forwarded-for'], особенно при работе с мобильными телефонами, имеющими доступ к вашему серверу (данные Wi-Fi и данные оператора).

0 голосов
/ 22 сентября 2015

Также req.headers['x-forwarded-for'] легко манипулировать, поэтому вам нужен правильно настроенный прокси-сервер.

Лучше проверить req.connection.remoteAddress по списку известных прокси-серверов, прежде чем переходить к req.headers['x-forwarded-for'].

...