Chr*_*let 46

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

ws._socket.remoteAddress
Run Code Online (Sandbox Code Playgroud)

或者,如果您有权访问reqvia wss.on('connection', (ws, req) => {}):

req.connection.remoteAddress;
Run Code Online (Sandbox Code Playgroud)

例如,您可以使用它来GeoIP定位用户连接的位置.

编辑:

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

req.headers['x-forwarded-for'] || req.connection.remoteAddress
Run Code Online (Sandbox Code Playgroud)

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


小智 22

通过打印套接字对象中的键得到这个:

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

> ws._socket.remoteAddress
  '74.125.224.194'

> ws._socket.remotePort
  41435
Run Code Online (Sandbox Code Playgroud)

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


小智 6

在 websocket 服务器中,由于req.connection已弃用,因此您可以使用req.socket.

wss.on('connection', (ws, req) => {
    console.log(req.socket.remoteAddress);
});
Run Code Online (Sandbox Code Playgroud)