Зокрема, для вузла, документація для компонента http-сервера під підключенням до події говорить:
[Спрацьовує], коли встановлено новий потік TCP. [Сокет] є об'єктом типу net.Socket. Зазвичай користувачі не захочуть отримувати доступ до цієї події. Зокрема, сокет не буде випромінювати почитаних подій через те, як аналізатор протоколу приєднується до сокета. До розетки можна також звернутися за адресою request.connection
.
Отже, це означає, що request.connection
це socket, і згідно з документацією, дійсно є атрибут socket.remoteAddress, який згідно з документацією є:
Рядок представлення віддаленої IP-адреси. Наприклад, '74 .125.127.100 'або' 2001: 4860: a005 :: 68 '.
Під експресом об’єкт запиту також є екземпляром об’єкта запиту http Node, тому такий підхід все одно повинен працювати.
Однак у Express.js запит вже має два атрибути: req.ip та req.ips
req.ip
Поверніть віддалену адресу, або коли ввімкнено "довірений проксі" - адресу верхнього потоку.
req.ips
Коли "довірений проксі" є true
, проаналізуйте ip-список "X-Forwarded-For" і поверніть масив, інакше повернеться порожній масив. Наприклад, якщо значенням було "client, proxy1, proxy2", ви отримаєте масив ["client", "proxy1", "proxy2"], де "proxy2" - це найдальший низхідний потік.
Можливо, варто згадати, що, наскільки я розумію, Експрес req.ip
- це кращий підхід, ніж req.connection.remoteAddress
, оскількиreq.ip
містить фактичний ip клієнта (за умови, що довірений проксі включений у експресі), тоді як інший може містити IP-адресу проксі (якщо є один).
Ось чому причина прийнятої відповіді пропонує:
var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress;
req.headers['x-forwarded-for']
Буде еквівалентна експрес req.ip
.