В настоящее время я использую socket.io v2.0.3 на сервере node.js и не могу найти способ получить IP-адрес клиента.

Существует множество советов и приемов по поводу переполнения стека, но они устарели и больше не работают.

4
Darker 28 Авг 2017 в 20:51

4 ответа

Лучший ответ

Он находится в socket.handshake

{
  headers: /* the headers sent as part of the handshake */,
  time: /* the date of creation (as string) */,
  address: /* the ip of the client */,
  xdomain: /* whether the connection is cross-domain */,
  secure: /* whether the connection is secure */,
  issued: /* the date of creation (as unix timestamp) */,
  url: /* the request URL string */,
  query: /* the query object */
}

Смотрите эту ссылку

Изменить . Возможно, он изменился на socket.request.connection.remoteAddress , см. эту ссылку.

Edit2 . Возможно, проблема связана с невыровненной версией клиента и сервера.

4
Eric 28 Авг 2017 в 19:40

В настоящее время существует открытый вопрос: Удаленный адрес (IP) всегда не определен # 2982

Я уверен, что это будет исправлено в ближайшее время, до тех пор нет причин понижать рейтинг, если вам действительно нужно получить IP-адрес клиента, есть возможное решение.

подтверждение концепции

const socketServer = require('socket.io')(3000)
socketServer.on('connection',function(client){
 console.log( client.request.connection._peername.address );
})
const socketCli = require('socket.io-client')('http://localhost:3000')

< Сильный > выход:

::ffff:127.0.0.1
3
EMX 28 Авг 2017 в 19:03

Успешное получение значений IP с помощью transports: ['websocket'] в соединении сокета для всех трех ключей ниже, версия 2.3.0.

socket.request.connection.remoteAddress ::ffff:127.0.0.1
socket.conn.remoteAddress ::ffff:127.0.0.1
socket.conn.transport.socket._socket.remoteAddress ::ffff:127.0.0.1
0
Reece Daniels 15 Ноя 2019 в 17:28

В socket.io 2.0: вы можете использовать:

socket.conn.transport.socket._socket.remoteAddress

Работает с transports: ['websocket']

2
Chris' 31 Авг 2017 в 18:19