访问http.get回调内的主机

时间:2014-05-21 14:31:21

标签: node.js http

我在内部网络中有一些客户端,但每次IP都会更改DHCP。

我知道每个客户端都会在REST呼叫中回答一个号码:

http://myclient/status ---> if it is only a number it is OK

我不想使用域名,因为我没有使用IP地址的一些错误行为,所以我的解决方案是这样的:

for (var i = 0; i < 255; i++) {

    var options = {
        host: '192.168.1.'+i,
        port: 80,
        path: '/status/',
        auth: 'root:password'
    };

    var request = http.get(options, function(htres){

        var __CLIENT_IP__ = ???? // how to access client ip here?

        var body = "";
        htres.on('data', function(data) {
            body += data;
        });
        htres.on('end', function() {
            if( htres.statusCode == 404 ) {
                res.end();
                return;
            }
            // ...
            // PARSE MY INT HERE
            // ...
        })
        htres.on('error', function(e) {
            console.log(e.message);
        });
    }).on('error', function(e) {
        var __CLIENT_IP__ = ???? // how to access client ip here?
        console.log(__CLIENT_IP__ + ' does not seems to have port 80 opened');

    });
};

2 个答案:

答案 0 :(得分:1)

您可以使用htres.socket.remoteAddress获取IP。

如果你真的需要它来处理错误处理程序,你可以改为:

for (var i = 0; i < 255; i++) {

    var options = {
        host: '192.168.1.'+i,
        port: 80,
        path: '/status/',
        auth: 'root:password'
    };

    (function(__CLIENT_IP__) {
      var request = http.get(options, function(htres) {
          var body = "";
          htres.on('data', function(data) {
              body += data;
          });
          htres.on('end', function() {
              if( htres.statusCode == 404 ) {
                  res.end();
                  return;
              }
              // ...
              // PARSE MY INT HERE
              // ...
          })
          htres.on('error', function(e) {
              console.log(e.message);
          });
      }).on('error', function(e) {
          console.log(__CLIENT_IP__ + ' does not seems to have port 80 opened');
      });
    })(options.host);
};

答案 1 :(得分:0)

这可能不是最好的方法(特别是在你的情况下,因为你迭代255次),但这是一种访问它的方法:

function request_all(i, options, callback) {
    if(i < 255)
    {
        var options = {
            host: '192.168.1.'+i,
            port: 80,
            path: '/status/',
            auth: 'root:password'
        };

        var request = http.get(options, function(htres){

            var __CLIENT_IP__ = options.host;
            //REST OF YOUR CODE HERE
        });

    request_all(i + 1, options, callback);
    }
}
编辑:通过分离增量和执行来复制答案更好......(但是使用JQuery)