Nodo JS - get FQDN [chiuso]


8

Come posso ottenere l'FQDN (nome di dominio completo) della macchina su quale nodo è in esecuzione?

os.gethostname()non è sufficiente, poiché di solito restituisce solo il DN non qualificato. Stessa cosa per dns.reverse(ip, callback)- supponendo che l'ip sia quello associato al nome host, ad esempio ottenuto usando dns.lookup(os.gethostname()[, options], callback).

Anche fare una shell.exec("hostname -f", { silent: true }, cb)non è un'opzione, poiché non è conforme a POSIX e quindi fallirà ad es. Su Solaris et. al., ed è un vero e proprio hack, dato che exec () è un call wrt molto, molto costoso . risorse come RAM e CPU (causa il cambio di contesto).


$(hostname).$(domainname)funzionerà sia su Solaris che su Linux. Ma Solaris POSIX non è solo, è certificato POSIX! È più POSIX di Linux.
Sarà il

3
Sto votando per chiudere questa domanda come fuori tema perché questo avrebbe dovuto essere spostato in SO
Anthon

Risposte:


10

Il trucco è utilizzare la getnameinfo(...)funzione fornita dal sistema operativo di solito tramite libc.so o libsocket.so, dal momento che esegue una ricerca FQDN per impostazione predefinita! Perché dns.lookupService(address, port, callback)sembra essere l'unica funzione core documentata di nodeJS, che "la avvolge", dobbiamo usare questa. Per esempio:

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

La porta 0 viene utilizzata nell'esempio per mostrare che ciò non ha alcuna influenza sul risultato (per impostazione predefinita non esiste un servizio definito per questa porta).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.