我在客户端对象上找不到客户端IP参数。
答案 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);
});