42

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

4

3 回答 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 服务器可以直接使用以及通过反向代理使用,您可能需要检查remoteAddressbefore 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 回答