ノードJS-FQDNを取得する[終了]


8

ノードが実行されているマシンのFQDN(完全修飾ドメイン名)を取得するにはどうすればよいですか?

os.gethostname()通常は修飾されていないDNのみを返すため、これは十分ではありません。同じことdns.reverse(ip, callback)-IPがホスト名に関連付けられているものであると仮定しdns.lookup(os.gethostname()[, options], callback)ます(例:を使用して取得)。

また、aを実行するshell.exec("hostname -f", { silent: true }, cb)ことはオプションではありません。POSIXに準拠していないため、Solarisなどでは失敗します。また、exec()は非常に高価な呼び出しwrt であるため、これは本当に悪いハックです。RAMやCPUなどのリソース(コンテキスト切り替えの原因)。


$(hostname).$(domainname)SolarisとLinuxの両方で動作します。しかし、Solaris POSIXだけでなく、POSIX認定も受けています。LinuxよりもPO​​SIXです。
2016

3
これはSOに移動されているはずなので、オフトピックとして、私はこの質問を閉じるために投票しています
Anthonの

回答:


10

コツはgetnameinfo(...)、デフォルトでFQDNルックアップを行うため、通常libc.soまたはlibsocket.soを介してOSによって提供される関数を利用することです。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を使用して、これが結果に影響を与えないことを示しています(デフォルトでは、このポートにはサービスが定義されていません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.