Я не могу найти IP-параметр клиента на объекте клиента.
Как получить IP-адрес клиента с помощью библиотеки Websocket (websockets/ws) в Node.js?
Ответ 1
После небольшого беспорядка, пытающегося выяснить, какой из них дает IP-адрес клиента (веб-браузера), ответ:
ws._socket.remoteAddress
Или, если у вас есть доступ к req
через wss.on('connection', (ws, req) => {})
:
req.connection.remoteAddress;
Вы можете использовать это, например, в GeoIP locate, где пользователь подключается.
Edit:
Если вы используете Node за обратным прокси-сервером Nginx (или любым другим обратным прокси-сервером), вам может потребоваться использовать:
req.headers['x-forwarded-for'] || req.connection.remoteAddress
Примечание по безопасности. Если ваш сервер Node доступен напрямую, а также через обратный прокси, вы можете проверить remoteAddress
перед тем, как доверять x-forwarded-for
. Удаленным адресом должен быть ваш обратный IP-адрес. Там странный шанс, что кто-то может вызвать ваше обслуживание напрямую и обмануть x-forwarded-for
.
Ответ 2
Получил это от печати ключей в объекте сокета:
> ws._socket.address()
{ port: 8081,
family: 2,
address: '127.0.0.1' }
> ws._socket.remoteAddress
'74.125.224.194'
> ws._socket.remotePort
41435
У меня нет документации, поэтому я не уверен, насколько хорошо это поддерживается в разных версиях:/