Node JS - get FQDN [fermé]


8

Comment puis-je obtenir le nom de domaine complet (FQDN) de la machine sur laquelle le nœud s'exécute?

os.gethostname()n'est pas suffisant, car il renvoie généralement le DN non qualifié uniquement. Même chose pour dns.reverse(ip, callback)- en supposant que l'IP est celle associée au nom d'hôte, par exemple obtenue en utilisant dns.lookup(os.gethostname()[, options], callback).

Faire aussi un shell.exec("hostname -f", { silent: true }, cb)n'est pas une option, car il n'est pas compatible POSIX et échouera donc par exemple sur Solaris et. al., et c'est un très mauvais hack, car exec () est un appel très, très cher wrt. des ressources comme la RAM et le CPU (provoque un changement de contexte).


$(hostname).$(domainname)fonctionnera sur Solaris et Linux. Mais, non seulement Solaris POSIX, il est certifié POSIX! C'est plus POSIX que Linux.
Will

3
Je vote pour fermer cette question comme hors sujet car elle aurait dû être déplacée vers SO
Anthon

Réponses:


10

L'astuce consiste à utiliser la getnameinfo(...)fonction fournie par le système d'exploitation généralement via libc.so ou libsocket.so, car il effectue une recherche FQDN par défaut! Parce que dns.lookupService(address, port, callback)semble être la seule fonction de base de nodeJS documentée, qui la "enveloppe", nous devons utiliser celle-ci. Par exemple:

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

Le port 0 est utilisé dans l'exemple pour montrer que cela n'a aucune influence sur le résultat (par défaut, aucun service n'est défini pour ce port).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.