【问题标题】:how to get client ip address in socket.io如何在socket.io中获取客户端IP地址
【发布时间】:2019-02-20 12:09:05
【问题描述】:

嗨,我在升级之前在 socket.io 版本 1.3.7 中获取客户端 IP 地址时遇到问题,但更新后我每次未定义时都会得到这是我在更新之前使用的代码

这是我的服务器端代码

sockets.on('connection',function(sock){

var address = sock.handshake.address;

这个从客户端发送的ip地址

var remote = 'http://my_ip_address:9008/';
    socket = io.connect(!!local ? local : remote);
    socket.on("connect", function () {
    console.log("connected");
            getData();
    });

更新后它在 socket.io 版本 1.3.7 中不起作用,所以请帮我解决这个问题并建议 1.3.7 版本的完美代码

【问题讨论】:

  • sock.handshake.address 应该是客户端的 IP 地址。它在 socket.io 1.4.5 中对我有用。根据您的系统配置,它可能会以 IPv6 格式显示。
  • id 对于新版本的 socket.io 客户端的连接是否有任何更改,如果您对此有任何想法,我的客户端连接套接字代码是否完美,所以请告诉我我仍然不能获取ip地址
  • 从服务器获取各种 IP 地址的方法如下:stackoverflow.com/questions/38423930/…

标签: node.js sockets socket.io


【解决方案1】:

我不太喜欢套接字,但我想这会对你有所帮助。

您需要使用 address.address 和端口 address.port

sockets.on('connection',function(sock){ 
var address = sock.handshake.address;
      console.log('New connection from ' + address.address + ':' + address.port);
});

对于 Socket.io 1.0 版 服务器端:

sockets.on('connection',function(sock){ 
    var clientIpAddress = sock.request.headers['x-forwarded-for'] || sock.request.connection.remoteAddress;
    console.log(' new request from : '+clientIpAddress);
});

【讨论】:

  • 非常感谢 - 花了太多时间搜索服务器端解决方案
【解决方案2】:

截至 2019 年 2 月 20 日,我就是这样做的:

let ip = _.has(socket.handshake.address, 'address') 
              ? socket.handshake.address.address 
              : socket.handshake.address;
if (ip === "127.0.0.1") {
  ip = _.has(socket.handshake.headers, 'x-real-ip') 
            ? socket.handshake.headers['x-real-ip'] 
            : socket.handshake.headers['x-forwarded-for'];
}

lodash.has()的帮助下

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-21
    • 2017-12-20
    • 1970-01-01
    • 2012-03-14
    • 2012-02-16
    • 2019-01-14
    • 2021-10-22
    相关资源
    最近更新 更多