节点JS-获取FQDN [关闭]


8

如何获得运行该节点的计算机的FQDN(完全合格域名)?

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

shell.exec("hostname -f", { silent: true }, cb)不能选择a,因为它不符合POSIX,因此会失败,例如在Solaris等上。等,这是一个非常糟糕的技巧,因为exec()是一个非常非常昂贵的调用wrt。RAM和CPU等资源(导致上下文切换)。


$(hostname).$(domainname)在Solaris和Linux上均可使用。但是,不仅是Solaris POSIX,而且它还通过POSIX认证!POSIX比Linux多得多。
2016年

3
我投票结束这个题为离题的问题,因为这应该已经移至SO
Anthon's

Answers:


10

技巧是利用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来表明这对结果没有影响(默认情况下,没有为此端口定义服务)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.