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

Как получить IP-адрес клиента с помощью библиотеки Websocket (websockets/ws) в Node.js?

Я не могу найти IP-параметр клиента на объекте клиента.

4b9b3361

Ответ 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

У меня нет документации, поэтому я не уверен, насколько хорошо это поддерживается в разных версиях:/