首页 > 解决方案 > 当服务器应用程序在 EC2 上运行时如何获取用户的浏览器 ID

问题描述

我的应用程序在 ec2 实例上运行。我们将 node.js 用于服务器端代码。我们正在使用socket.io,express连接客户端代码。我需要捕获用户的浏览器IP并将其发送到服务器端代码。我已经尝试了下面的代码,但它给了我服务器 IP 详细信息。

 io.sockets.on('connection', function (socket) {
  var socketId = socket.id;
  var clientIp = socket.handshake.headers;
  console.log('connection :', socket.request.connection._peername);
  console.log(socket.request.client._peername.address);

  console.log(clientIp);
});

有什么方法可以捕获用户的浏览器IP,会很有帮助。我很欣赏你的建议。

标签: node.jssocket.io

解决方案


在您的客户端代码中,您无法判断您将从哪个 IP 地址进行连接。

服务器端(快速服务器),您可以轻松地从请求中获取远程 IP 地址,如下所示:

console.log(req.connection.remoteAddress);

请注意,就像任何其他服务器一样,这只会告诉您从哪里看到连接 - 用户可能正在使用 VPN,或者在公司防火墙后面等,在这种情况下,IP 地址可能没有多大意义。这对您是否重要取决于您尝试收集它的原因(日志记录或更有意义的东西)。

不要忘记,如果您的 express 应用程序位于 Web 服务器(如 nginx)后面,您可能需要查看 forwarded-for 标头 - 请参阅相关的 SO 问题How to get remote client address


推荐阅读