Nó JS - obtenha o FQDN [fechado]


8

Como posso obter o FQDN (nome de domínio totalmente qualificado) da máquina na qual o nó está sendo executado?

os.gethostname()não é suficiente, pois geralmente retorna apenas o DN não qualificado. A mesma coisa para dns.reverse(ip, callback)- assumindo que o ip é o associado ao nome do host, por exemplo, obtido usando dns.lookup(os.gethostname()[, options], callback).

Também fazer a shell.exec("hostname -f", { silent: true }, cb)não é uma opção, pois não é compatível com POSIX e, portanto, falhará, por exemplo, no Solaris et. e é um hack muito ruim, já que exec () é uma chamada muito, muito cara . recursos como RAM e CPU (causa a alternância de contexto).


$(hostname).$(domainname)funcionará no Solaris e Linux. Mas, além do Solaris POSIX, é certificado pelo POSIX! É mais POSIX que o Linux.
Will

3
Estou votando para encerrar esta questão como fora de tópico, porque ela deveria ter sido movida para SO
Anthon

Respostas:


10

O truque é utilizar a getnameinfo(...)função fornecida pelo sistema operacional normalmente via libc.so ou libsocket.so, pois ele faz uma pesquisa no FQDN por padrão! Como dns.lookupService(address, port, callback)parece ser a única função principal do nodeJS documentada, que a "envolve", precisamos usar essa. Por exemplo:

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);
    });
});

A porta 0 é usada no exemplo para mostrar que isso não influencia o resultado (por padrão, não há serviço definido para esta porta).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.