Nó JS - obtenha o FQDN [fechado]

7

Como posso obter o FQDN (nome de domínio totalmente qualificado) da máquina em que 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 é aquele associado ao nome do host, por exemplo obtido usando dns.lookup(os.gethostname()[, options], callback) .

Além disso, fazer um shell.exec("hostname -f", { silent: true }, cb) não é uma opção, uma vez que não é compatível com POSIX e, portanto, falhará, e. no Solaris et. al., e é um truque muito ruim, já que exec () é muito, muito caro call wrt. recursos como RAM e CPU (causa a troca de contexto).

    
por jelmd 03.02.2016 / 22:27

1 resposta

9

O truque é utilizar a função getnameinfo(...) fornecida pelo sistema operacional geralmente via libc.so ou libsocket.so, já que ela faz uma pesquisa FQDN por padrão! Como dns.lookupService(address, port, callback) parece ser a única função principal do nodeJS documentada, que "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 tem influência no resultado (por padrão, não há serviço definido para essa porta).

    
por 03.02.2016 / 22:56

Tags