我在客户端对象上找不到客户端 IP 参数。
问问题
64339 次
3 回答
67
在尝试找出哪个提供客户端(Web 浏览器)IP 地址之后,答案是:
ws._socket.remoteAddress
或者,如果您可以req
通过以下方式访问wss.on('connection', (ws, req) => {})
:
req.socket.remoteAddress
例如,您可以使用它来 GeoIP 定位用户连接的位置。
编辑:
如果你在 Nginx 反向代理(或任何其他反向代理)后面运行 Node,你可能需要使用:
req.headers['x-forwarded-for'] || req.connection.remoteAddress
关于安全性的说明:如果您的 Node 服务器可以直接使用以及通过反向代理使用,您可能需要检查remoteAddress
before trusting x-forwarded-for
。远程地址应该是您的反向代理的 IP。有人可能会直接调用您的服务并进行欺骗x-forwarded-for
。
于 2013-08-31T23:44:27.927 回答
26
通过在套接字对象中打印键得到这个:
> ws._socket.address()
{ port: 8081,
family: 2,
address: '127.0.0.1' }
> ws._socket.remoteAddress
'74.125.224.194'
> ws._socket.remotePort
41435
我没有任何文档,所以我不确定跨版本的支持程度:/
于 2013-04-21T01:14:23.710 回答
3
在 websocket 服务器中,由于req.connection
已弃用,因此您使用req.socket
.
wss.on('connection', (ws, req) => {
console.log(req.socket.remoteAddress);
});
于 2021-05-13T19:08:50.730 回答