ノードを実行しているコンピュータの完全修飾ドメイン名(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が結果に影響しないことを示すために使用されています(デフォルトでは、このポートに定義されたサービスはありません)。