我的应用程序正在ec2实例上运行。我们正在使用node.js作为服务器端代码。我们正在使用socket.io来连接客户端代码,我需要捕获用户的浏览器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,这将是很大的帮助。 感谢您的建议。
答案 0 :(得分:1)
在您的客户端代码中,您无法确定将从哪个IP地址进行连接。
在服务器端(快速服务器)上,您可以轻松地从请求中获取远程IP地址,如下所示:
console.log(req.connection.remoteAddress);
请注意,就像任何其他服务器一样,这仅告诉您连接的来源-用户可能正在使用VPN,或者在公司防火墙后面,等等,在这种情况下IP地址可能没有太多含义。这对您是否重要取决于您为什么要尝试收集它(记录或更有意义的东西)。
请不要忘记,如果您的快速应用程序位于Web服务器(如nginx)的后面,则可能需要查看转发的标头-请参阅相关的S.O。问题How to get remote client address。
答案 1 :(得分:0)
我们尚未使用nginx。我们只是在后台运行nohup命令来启动ec2中的服务器。我尝试使用以下命令
console.log(request.socket.remoteAddress)
它给了我服务器端ip而不是客户端ip。我们正在本地系统中使用此应用程序:8000 / index.html。我想捕获本地系统IP。这个console.log(req.connection.remoteAddress) gives me TypeError: Cannot read property 'remoteAddress' of undefined