Ao usar o socket.IO em um servidor Node.js., existe uma maneira fácil de obter o endereço IP de uma conexão de entrada? Eu sei que você pode obtê-lo a partir de uma conexão HTTP padrão, mas o socket.io é um pouco diferente.
node.js
ip-address
socket.io
Toji
fonte
fonte
console.dir(socket)
pode ser o que você quis dizerRespostas:
Ok, a partir de 0.7.7 isso está disponível, mas não da maneira que o lubar descreve. Acabei precisando analisar alguns logs de confirmação no hub git para descobrir isso, mas o código a seguir realmente funciona para mim agora:
fonte
1.3.7
, isso retorna::ffff:127.0.0.1
socket.request.connection.remoteAddress
para versão 1.xpara 1.0.4:
fonte
socket.request.connection.remoteAddress
esocket.request.connection.remotePort
trabalhe para mim. No entanto, não vi nenhuma dessas propriedades listadas quando tentei:console.log(util.inspect(socket.request.connection, {showHidden: true, colors: true}));
Por que não?1.3.7
, isso retorna::ffff:127.0.0.1
Se você usar outro servidor como proxy reverso, todos os campos mencionados conterão localhost. A solução mais fácil é adicionar cabeçalhos para ip / porta no servidor proxy.
Exemplo para nginx: adicione isto após o seu
proxy_pass
:Isso disponibilizará os cabeçalhos no servidor do nó socket.io:
Observe que o cabeçalho é convertido internamente em minúsculas.
Se você estiver conectando o servidor do nó diretamente ao cliente,
funciona com socket.io versão 1.4.6 para mim.
fonte
Para a versão mais recente do socket.io, use
Por exemplo:
tenha em atenção que o código abaixo devolve o IP do servidor, não o IP do cliente
fonte
Usando a
1.0.6
versão mais recenteSocket.IO
e implantando meu aplicativoHeroku
, obtenho o clienteIP
e oport
usoheaders
nosocket handshake
:fonte
Desde socket.io 1.1.0, eu uso:
Edit : Observe que isso não faz parte da API oficial e, portanto, não é garantido que funcione em versões futuras do socket.io.
Consulte também este link relevante: questão do engine.io
fonte
A versão 0.7.7 do Socket.IO agora afirma retornar o endereço IP do cliente. Eu tive sucesso com:
fonte
Isso parece funcionar:
fonte
127.0.0.1
para mim, não o IP do cliente (o node.js é executado no servidor remoto).Descobri que dentro do socket.handshake.headers existe um endereço encaminhado que não aparece na minha máquina local. E consegui obter o endereço remoto usando:
Isso está no lado do servidor e não no lado do cliente.
fonte
::ffff:127.0.0.1
, mas isso me deu o IP realAo ler o código-fonte socket.io, parece que o método "listen" recebe argumentos (servidor, opções, fn) e se "server" for uma instância de um servidor HTTP / S, ele simplesmente o envolverá.
Portanto, você provavelmente poderia dar a ele um servidor vazio que escute o evento 'connection' e lide com o socket remoteAddress; no entanto, as coisas podem ser muito difíceis se você precisar associar esse endereço a um objeto socket.io socket.io real.
Pode ser mais fácil enviar um patch para socket.io em que seu próprio objeto Socket é estendido com a propriedade remoteAddress atribuída no momento da conexão ...
fonte
Muito fácil. Coloque primeiro
Você verá todos os campos do soquete. use CTRL + F e procure o endereço da palavra. Finalmente, quando você encontrar o campo remoteAddress, use pontos para filtrar os dados. no meu caso é
fonte
No socket.io 2.0 : você pode usar:
socket.conn.transport.socket._socket.remoteAddress
funciona com
transports: ['websocket']
fonte
Isso funciona para a versão mais recente 2.3.0 :
fonte
no
socket.io
1.3.4 você tem as seguintes possibilidades.socket.handshake.address
,socket.conn.remoteAddress
ousocket.request.client._peername.address
fonte
Na versão v2.3.0
este trabalho para mim:
fonte
usar
socket.request.connection.remoteAddress
fonte
1.3.7
, isso retorna::ffff:127.0.0.1
A versão mais recente funciona com:
fonte
1.3.7
, isso retorna::ffff:127.0.0.1
0.0.0.0
. Relacionados: stackoverflow.com/a/37378670/5138796Bem-vindo em 2019, onde o texto datilografado domina lentamente o mundo. Outras respostas ainda são perfeitamente válidas. No entanto, eu só queria mostrar como você pode configurar isso em um ambiente digitado.
Caso você ainda não tenha. Você deve primeiro instalar algumas dependências (ou seja, a partir da linha de comando:
npm install <dependency-goes-here> --save-dev
)Eu defini as importações usando as importações do ES6 (que você deve ativar
tsconfig.json
primeiro no seu arquivo.)Como uso o texto datilografado, agora tenho digitação completa, em tudo o que faço com esses objetos.
Então, obviamente, primeiro você precisa de um servidor http:
Eu acho que você já fez tudo isso. E você provavelmente já adicionou o soquete io a ele:
Em seguida, para o tratamento de novas conexões socket-io, você pode colocar o
SocketIO.Socket
tipo em seu parâmetro.E finalmente, como temos digitação completa agora, podemos recuperar facilmente o ip do soquete, sem adivinhar:
fonte
No 1.3.5:
fonte
1.3.7
, isso retorna o URL da página, não o ip