【问题标题】:Get IP of connection in socket.io 1.4.5在 socket.io 1.4.5 中获取连接的 IP
【发布时间】:2017-02-17 16:08:28
【问题描述】:

我想知道当用户连接到服务器 n socket.io 时如何获取用户的 IP。我试过使用这段代码,它应该像这样记录连接地址和端口:

var io = require('socket.io')(serv, {});
io.sockets.on('connection', function(socket) {
  var address = socket.handshake.address;
  console.log('New connection from ' + address.address + ':' + address.port);
  socket.on('request', function(data) {
    console.log('Request Sent')
    length = data.length
    if (data.request == 'sessionID') {
      socket.emit('sendSessionID', {
        id: generateSessionID(length)
      });
      console.log('Sent session ID')
    }
    if (data.request == 'players') {

    }
  });
});
当我运行此代码时,尽管 address.address 未定义并且与 address.port 相同。那么当我使用 1.4.5 时,我应该如何获取 IP 和端口呢?我找不到任何新更新的东西。

【问题讨论】:

    标签: javascript node.js socket.io ip ip-address


    【解决方案1】:

    IP 地址在socket.handshake.address,而不是socket.handshake.address.address


    虽然这些似乎都没有记录在 socket.io 中,但您可以使用这些获取远程 IP 地址和远程端口:

    socket.request.connection.remoteAddress
    socket.request.connection.remotePort
    

    当我从局域网上的另一台计算机连接到 socket.io 服务器时,我会看到上述两个设置的以下输出:

    ::ffff:192.168.1.56
    51210
    

    这正确地为您提供了连接到您的服务器的远程计算机的 IP 地址和端口。 IP 地址::ffff:192.168.1.56 是 IPv4 映射地址。您将不得不在某些系统上处理这种形式的地址。

    【讨论】:

    • 那我如何获取端口呢?地址也打印为 ::ffff:then ip 或者有时它只是打印为 ::1 我不确定发生了什么
    • @McMatt - 我不知道你会在哪里找到 socket.io 中的端口。传入端口显然是您的服务器正在侦听的任何内容。您看到的 IP 地址可能是 localhost 的 IPv6 形式。从外部 IP 连接时尝试,而不是本地主机。
    • @McMatt - 以下是有关 IPv4 到 IPv6 地址格式的一些信息:When is the hybrid IP notation ::ffff:192.168.1.4 appropriate?
    • @McMatt - 我添加了有关获取端口的信息。
    猜你喜欢
    • 2019-10-24
    • 2014-10-18
    • 2011-07-16
    • 2012-08-31
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2014-11-12
    • 2019-06-20
    相关资源
    最近更新 更多