Node JS - FQDNのインポート[閉じる]

Node JS - FQDNのインポート[閉じる]

ノードを実行しているコンピュータの完全修飾ドメイン名(FQDN)を取得するにはどうすればよいですか?

os.gethostname()通常、正規化されていないDNのみを返すため、十分ではありません。同じですdns.reverse(ip, callback)。 ipがホスト名に関連付けられているIPであるとしますdns.lookup(os.gethostname()[, options], callback)

また、aを行うshell.exec("hostname -f", { silent: true }, cb)ことはオプションではありません。POSIX規格に準拠していないたとえば、Solaris などでは失敗します。待って、これは本当に悪いハッキングです。 exec() はとても高価電話してください。 RAMやCPUなどのリソース(コンテキスト切り替えを引き起こす)

答え1

getnameinfo(...)秘密は基本的にFQDNルックアップを実行するため、通常はlibc.soまたはlibsocket.soを介してオペレーティングシステムが提供する機能を利用することです。これを「ラップ」する文書化された唯一のnodeJSコア関数であるように思われるので、dns.lookupService(address, port, callback)それを使用する必要があります。たとえば、

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が結果に影響しないことを示すために使用されています(デフォルトでは、このポートに定義されたサービスはありません)。

関連情報