我在内部网络中有一些客户端,但每次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');
});
};
答案 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)