【问题标题】:javascript: print websocket client IPjavascript: 打印 websocket 客户端 IP
【发布时间】:2014-02-22 13:04:42
【问题描述】:

node.js WebSocket示例代码sn-p

我有一个使用 express 的简单 node.js 应用程序。 现在每次客户端连接到节点服务器时,我都会看到字符串“新客户端已连接”,但我想知道新客户端拥有哪个 IP。

var WebSocketServer = require('ws').Server;
var connIds = [];

var server = require('http').createServer(app).listen(80);

// set up the websocket server
var wss = new WebSocketServer( { server: server } );
wss.clientConnections = {};

// websocket server eventlisteners and callbacks
wss.on('connection', function (connection) {
  console.log('wss.on.connection - new client connected');
  ...

查看代码: https://github.com/qknight/relais.js/blob/master/relais.js/server.js#L159

问题

对象connection 具有属性,但我不明白如何查询它们或它们是什么。 我想要的只是打印客户端 IP,如果存在的话,可能还有其他类似的属性。

我该怎么做?

【问题讨论】:

    标签: javascript node.js websocket


    【解决方案1】:

    远程 IP 是升级前连接的属性:

    var wss = new WebSocketServer({port: 9876});    
    
    wss.on('connection', function(ws) {
      console.log(ws.upgradeReq.connection.remoteAddress);
    });
    

    我不记得我是如何找到它的,但我知道我花了一段时间;我希望文档和代码一样好...

    更新: WS 已经移动了一些东西,所以这里有一个更新示例,说明如何在当前代码中获取原始 HTTP 信息。注意连接事件处理程序的第二个参数:

    wss.on('connection', function conn(ws, req) {
        var ip  =  req.connection.remoteAddress;
        console.info(ip);
    });
    

    【讨论】:

    • 它只是给了我服务器的 IP 地址,而不是客户端。
    • @JurajCarnogursky 您可能会获得服务器的 IP,因为您的代理不会在标头中转发客户端 IP。您需要检查代理设置。
    • @SeanNovak:是的,这就像 5 岁一样,WS 发生了很大变化。如果你愿意,我可以发布新代码,我只是巧合地在上周重新修复了这个......
    • @dandavis,那太好了。没想到客户端IP会这么晦涩。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    相关资源
    最近更新 更多