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

时间:2013-02-11 23:13:41

标签: node.js websocket

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

3 个答案:

答案 0 :(得分:44)

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

ws._socket.remoteAddress

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

req.connection.remoteAddress;

例如,您可以将此用于GeoIP,找到用户所连接的位置。

修改

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

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

关于安全性的说明:如果您的节点服务器可以直接使用,也可以通过反向代理服务器,您可能希望在信任remoteAddress之前检查x-forwarded-for。远程地址应该是您的反向代理的IP。有人可以直接调用您的服务并欺骗x-forwarded-for

答案 1 :(得分:22)

通过打印套接字对象中的键来实现此目的:

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

> ws._socket.remoteAddress
  '74.125.224.194'

> ws._socket.remotePort
  41435

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

答案 2 :(得分:0)

在 websocket 服务器中,由于 req.connection 已被弃用,您使用 req.socket

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