我在客户端对象上找不到客户端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);
});