Al usar socket.IO en un servidor Node.js, ¿hay alguna manera fácil de obtener la dirección IP de una conexión entrante? Sé que puedes obtenerlo de una conexión HTTP estándar, pero socket.io es una bestia un poco diferente.
node.js
ip-address
socket.io
Toji
fuente
fuente
console.dir(socket)
podría ser lo que querías decirRespuestas:
Bien, a partir de 0.7.7 esto está disponible, pero no de la manera que describe lubar. Terminé necesitando analizar algunos registros de confirmación en git hub para resolver esto, pero el siguiente código realmente funciona para mí ahora:
fuente
1.3.7
, esto vuelve::ffff:127.0.0.1
socket.request.connection.remoteAddress
para la versión 1.xpara 1.0.4:
fuente
socket.request.connection.remoteAddress
ysocket.request.connection.remotePort
trabaja para mí. Sin embargo, no vi ninguna de estas propiedades enumeradas cuando intenté:console.log(util.inspect(socket.request.connection, {showHidden: true, colors: true}));
¿Por qué no?1.3.7
, esto vuelve::ffff:127.0.0.1
Si utiliza otro servidor como proxy inverso, todos los campos mencionados contendrán localhost. La solución más fácil es agregar encabezados para ip / port en el servidor proxy.
Ejemplo para nginx: agregue esto después de su
proxy_pass
:Esto hará que los encabezados estén disponibles en el servidor de nodo socket.io:
Tenga en cuenta que el encabezado se convierte internamente a minúsculas.
Si está conectando el servidor de nodo directamente al cliente,
funciona con socket.io versión 1.4.6 para mí.
fuente
Para la última versión de socket.io use
Por ejemplo:
tenga en cuenta que el siguiente código devuelve la IP del servidor, no la IP del cliente
fuente
Utilizando la última
1.0.6
versión deSocket.IO
mi aplicación y la tengo implementadaHeroku
, obtengo el clienteIP
y loport
usoheaders
ensocket handshake
:fuente
Desde socket.io 1.1.0, uso:
Editar : tenga en cuenta que esto no es parte de la API oficial y, por lo tanto, no se garantiza que funcione en futuras versiones de socket.io.
Consulte también este enlace relevante: problema engine.io
fuente
La versión 0.7.7 de Socket.IO ahora afirma devolver la dirección IP del cliente. He tenido éxito con:
fuente
Esto parece funcionar:
fuente
127.0.0.1
me devuelve , no la IP del cliente (node.js se ejecuta en el servidor remoto).He descubierto que dentro de socket.handshake.headers hay una dirección de reenvío que no aparece en mi máquina local. Y pude obtener la dirección remota usando:
Esto está en el lado del servidor y no del lado del cliente.
fuente
::ffff:127.0.0.1
pero esto me dio la IP realAl leer el código fuente de socket.io parece que el método "escuchar" toma argumentos (servidor, opciones, fn) y si "servidor" es una instancia de un servidor HTTP / S, simplemente lo envolverá por usted.
Por lo tanto, presumiblemente podría darle un servidor vacío que escucha el evento de 'conexión' y maneja el socket remoteAddress; sin embargo, las cosas pueden ser muy difíciles si necesita asociar esa dirección con un objeto socket.io real.
Podría ser más fácil enviar un parche a socket.io en el que su propio objeto Socket se extiende con la propiedad remoteAddress asignada en el momento de la conexión ...
fuente
Muy fácil. Primer puesto
Verá todos los campos de socket. luego use CTRL + F y busque la palabra dirección. Finalmente, cuando encuentre el campo remoteAddress use puntos para filtrar datos. en mi caso es
fuente
En socket.io 2.0 : puede usar:
socket.conn.transport.socket._socket.remoteAddress
funciona con
transports: ['websocket']
fuente
Esto funciona para la última versión 2.3.0 :
fuente
en
socket.io
1.3.4 tiene las siguientes posibilidades.socket.handshake.address
,socket.conn.remoteAddress
osocket.request.client._peername.address
fuente
En la versión v2.3.0
este trabajo para mi:
fuente
utilizar
socket.request.connection.remoteAddress
fuente
1.3.7
, esto regresa::ffff:127.0.0.1
La última versión funciona con:
fuente
1.3.7
, esto regresa::ffff:127.0.0.1
0.0.0.0
. Relacionado: stackoverflow.com/a/37378670/5138796Bienvenido en 2019, donde el mecanografiado se apodera lentamente del mundo. Otras respuestas siguen siendo perfectamente válidas. Sin embargo, solo quería mostrarle cómo puede configurar esto en un entorno mecanografiado.
En caso de que aún no lo hayas hecho. Primero debe instalar algunas dependencias (es decir, desde la línea de comandos:
npm install <dependency-goes-here> --save-dev
)Definí las importaciones utilizando las importaciones de ES6 (que
tsconfig.json
primero debe habilitar en su archivo).Como uso el mecanografiado, ahora tengo una escritura completa, en todo lo que hago con estos objetos.
Entonces, obviamente, primero necesitas un servidor http:
Supongo que ya hiciste todo eso. Y probablemente ya le haya agregado socket io:
Luego, para el manejo de nuevas conexiones socket-io, puede poner el
SocketIO.Socket
tipo en su parámetro.Y finalmente, porque ahora tenemos una escritura completa, podemos recuperar fácilmente la ip de nuestro socket, sin adivinar:
fuente
En 1.3.5:
fuente
1.3.7
, esto devuelve la URL de la página, no ip