我在客户端对象上找不到客户端IP参数。
经过一番摸索,试图找出哪一个可以获取客户端(Web 浏览器)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
。
forwarded-for
еә“пјҢе®ғеҸҜд»ҘиҮӘеҠЁдёәжӮЁеӨ„зҗҶеӨ§еӨҡж•°еҸҚеҗ‘д»ЈзҗҶе’ҢиҠӮзӮ№еҘ—жҺҘеӯ—дёҠзҡ„IPең°еқҖдҝЎжҒҜпјҢеӣ дёәиҝҷдәӣдҝЎжҒҜе·Із»ҸеҸ‘з”ҹдәҶеҫҲеӨҡеҸҳеҢ–гҖӮ - 3rdEdenconnection
事件中,@fadedbee请求被作为第二个参数提供:server.on('connection', (ws, req) => { ..
,请参阅https://github.com/websockets/ws/blob/master/doc/ws.md#event-connection。 - Will59从打印套接字对象中获取到此内容的键:
> ws._socket.address()
{ port: 8081,
family: 2,
address: '127.0.0.1' }
> ws._socket.remoteAddress
'74.125.224.194'
> ws._socket.remotePort
41435
我没有任何文档,所以不确定这在各个版本中的支持情况如何 :/
req.connection
已经被弃用,您应该使用 req.socket
。wss.on('connection', (ws, req) => {
console.log(req.socket.remoteAddress);
});