Node JS - 获取 FQDN

Node JS - 获取 FQDN

如何获取运行节点的计算机的 FQDN(完全限定域名)?

os.gethostname()是不够的,因为它通常只返回不合格的 DN。同样的事情dns.reverse(ip, callback)- 假设 ip 是与主机名关联的 IP,例如使用dns.lookup(os.gethostname()[, options], callback).

另外,做 ashell.exec("hostname -f", { silent: true }, cb)也不是一个选择,因为它是不符合 POSIX 标准因此会失败,例如在 Solaris 等上。等,这是一个非常糟糕的黑客,因为 exec() 是一个非常非常昂贵的请致电。 RAM 和 CPU 等资源(导致上下文切换)。

答案1

诀窍是利用getnameinfo(...)操作系统通常通过 libc.so 或 libsocket.so 提供的功能,因为它默认执行 FQDN 查找!因为dns.lookupService(address, port, callback)似乎是唯一有记录的nodeJS核心函数,它“包装”了它,所以我们需要使用这个。例如:

var os = require('os');
var dns = require('dns');

var h = os.hostname();
console.log('UQDN: ' + h);

dns.lookup(h, { hints: dns.ADDRCONFIG }, function(err, ip) {
    console.log('IP: ' + ip);
    dns.lookupService(ip, 0, function (err, hostname, service) {
        if (err) {
            console.log(err);
            return;
        }
        console.log('FQDN: ' + hostname);
        console.log('Service: ' + service);
    });
});

示例中使用端口 0 是为了表明这对结果没有影响(默认情况下没有为此端口定义服务)。

相关内容