如何使用Node.js中的WebSocket(websockets/ws)库获取客户端IP地址



我在客户端对象上找不到客户端IP参数。

在花了一点时间试图弄清楚哪一个给客户端(网络浏览器)的IP地址后,答案是:

ws._socket.remoteAddress

或者,如果您可以通过wss.on('connection', (ws, req) => {}):访问req

req.socket.remoteAddress

例如,您可以使用它来定位用户的连接位置。

编辑:

如果你在Nginx反向代理(或任何其他反向代理)后面运行Node,你可能需要使用:

req.headers['x-forwarded-for'] || req.socket.remoteAddress

关于安全性的注意事项:如果您的Node服务器可以直接使用,也可以通过反向代理使用,那么您可能需要在信任x-forwarded-for之前检查remoteAddress。远程地址应该是反向代理的IP。有一种奇怪的机会,有人可以直接打电话给你的服务,并欺骗x-forwarded-for

通过打印套接字对象中的密钥得到:

> ws._socket.address()
  { port: 8081,
    family: 2,
    address: '127.0.0.1' }
> ws._socket.remoteAddress
  '74.125.224.194'
> ws._socket.remotePort
  41435

我没有任何文档,所以我不确定各个版本对它的支持程度:/

在websocket服务器中,由于不推荐使用req.connection,因此使用req.socket

wss.on('connection', (ws, req) => {
    console.log(req.socket.remoteAddress);
});

相关内容

  • 没有找到相关文章

最新更新