При использовании socket.IO на сервере Node.js существует ли простой способ получить IP-адрес входящего соединения? Я знаю, что вы можете получить его через стандартное HTTP-соединение, но socket.io - это немного другой зверь.
node.js
ip-address
socket.io
Тодзи
источник
источник
console.dir(socket)
может быть это то, что вы имели в видуОтветы:
Хорошо, начиная с версии 0.7.7 это доступно, но не так, как описывает lubar. В итоге мне пришлось проанализировать некоторые журналы фиксации на git hub, чтобы понять это, но следующий код действительно работает для меня сейчас:
источник
1.3.7
, это возвращается::ffff:127.0.0.1
socket.request.connection.remoteAddress
для версии 1.xдля 1.0.4:
источник
socket.request.connection.remoteAddress
иsocket.request.connection.remotePort
работа для меня. Однако при попытке я не увидел ни одного из этих свойств в списке:console.log(util.inspect(socket.request.connection, {showHidden: true, colors: true}));
Почему бы и нет?1.3.7
, это возвращается::ffff:127.0.0.1
Если вы используете другой сервер в качестве обратного прокси-сервера, все упомянутые поля будут содержать localhost. Самый простой обходной путь - добавить заголовки для IP / порта на прокси-сервере.
Пример для nginx: добавьте это после
proxy_pass
:Это сделает заголовки доступными на сервере узла socket.io:
Обратите внимание, что заголовок внутренне преобразован в нижний регистр.
Если вы подключаете сервер узла напрямую к клиенту,
у меня работает с socket.io версии 1.4.6.
источник
Для последней версии socket.io используйте
Например:
помните, что приведенный ниже код возвращает IP-адрес сервера, а не IP-адрес клиента.
источник
Используя последнюю
1.0.6
версиюSocket.IO
и развернутое приложениеHeroku
, я получаю клиентIP
иport
использую егоheaders
вsocket handshake
:источник
Начиная с socket.io 1.1.0, я использую:
Изменить : обратите внимание, что это не часть официального API, и поэтому не гарантируется его работа в будущих выпусках socket.io.
Также см. Соответствующую ссылку: проблема engine.io
источник
Версия 0.7.7 Socket.IO теперь утверждает, что возвращает IP-адрес клиента. Я добился успеха с:
источник
Это похоже на работу:
источник
127.0.0.1
для меня, а не для IP-адреса клиента (node.js работает на удаленном сервере).Я обнаружил, что в socket.handshake.headers есть перенаправленный адрес, который не отображается на моем локальном компьютере. И мне удалось получить удаленный адрес, используя:
Это на стороне сервера, а не на стороне клиента.
источник
::ffff:127.0.0.1
но это дало мне настоящий IPИз чтения исходного кода socket.io похоже, что метод "listen" принимает аргументы (server, options, fn), и если "server" является экземпляром сервера HTTP / S, он просто обернет его для вас.
Таким образом, вы могли бы предположительно предоставить ему пустой сервер, который прослушивает событие «соединение» и обрабатывает удаленный адрес сокета; однако все может быть очень сложно, если вам нужно связать этот адрес с реальным объектом socket.io Socket.
Возможно, будет проще отправить патч на socket.io, в котором их собственный объект Socket расширен с помощью свойства remoteAddress, назначенного во время соединения ...
источник
Очень просто. Сначала положил
Вы увидите все поля сокета. затем используйте CTRL + F и найдите адрес слова. Наконец, когда вы найдете поле remoteAddress, используйте точки для фильтрации данных. в моем случае это
источник
В socket.io 2.0 : вы можете использовать:
socket.conn.transport.socket._socket.remoteAddress
работает с
transports: ['websocket']
источник
Это работает для последней версии 2.3.0 :
источник
в
socket.io
1.3.4 у вас есть следующие возможности.socket.handshake.address
,socket.conn.remoteAddress
илиsocket.request.client._peername.address
источник
В версии v2.3.0
эта работа для меня:
источник
использование
socket.request.connection.remoteAddress
источник
1.3.7
это возвращается::ffff:127.0.0.1
Последняя версия работает с:
источник
1.3.7
, это возвращается::ffff:127.0.0.1
0.0.0.0
. Связанный: stackoverflow.com/a/37378670/5138796Добро пожаловать в 2019 год, когда машинопись постепенно захватывает мир. Другие ответы все еще в силе. Однако я просто хотел показать вам, как вы можете настроить это в типизированной среде.
Если вы еще этого не сделали. Вы должны сначала установить некоторую зависимость (например , из командной строки:
npm install <dependency-goes-here> --save-dev
)Я определил импорт, используя импорт ES6 (который вы должны
tsconfig.json
сначала включить в своем файле).Поскольку я использую машинописный текст, у меня теперь есть полный набор текста для всего, что я делаю с этими объектами.
Итак, очевидно, для начала вам понадобится http-сервер:
Думаю, ты уже все это сделал. И вы, наверное, уже добавили в него socket io:
Затем, для обработки новых соединений socket-io, вы можете указать
SocketIO.Socket
тип в его параметре.И наконец, поскольку теперь у нас есть полная типизация, мы можем легко получить ip из нашего сокета, не догадываясь:
источник
В 1.3.5:
источник
1.3.7
, это возвращает URL-адрес страницы, а не IP-