Knoten JS - FQDN abrufen [geschlossen]


8

Wie kann ich den FQDN (Fully Qualified Domain Name) des Computers abrufen, auf dem der Knoten ausgeführt wird?

os.gethostname()ist nicht ausreichend, da normalerweise nur der nicht qualifizierte DN zurückgegeben wird. Gleiches gilt für dns.reverse(ip, callback)- vorausgesetzt, die IP-Adresse ist diejenige, die dem Hostnamen zugeordnet ist, z dns.lookup(os.gethostname()[, options], callback). B. mit .

Auch a shell.exec("hostname -f", { silent: true }, cb)ist keine Option, da es nicht POSIX-kompatibel ist und daher z. B. unter Solaris et. al., und es ist ein wirklich schlechter Hack, da exec () ein sehr, sehr teurer Aufruf ist. Ressourcen wie RAM und CPU (verursacht Kontextwechsel).


$(hostname).$(domainname)funktioniert sowohl unter Solaris als auch unter Linux. Solaris POSIX ist jedoch nicht nur POSIX-zertifiziert! Es ist mehr POSIX als Linux.
Will

3
Ich stimme dafür, diese Frage als nicht zum Thema gehörend zu schließen, da dies auf SO
Anthon

Antworten:


10

Der Trick besteht darin, die getnameinfo(...)vom Betriebssystem bereitgestellte Funktion normalerweise über libc.so oder libsocket.so zu verwenden, da standardmäßig eine FQDN-Suche durchgeführt wird! Da dns.lookupService(address, port, callback)dies die einzige dokumentierte NodeJS-Kernfunktion zu sein scheint, die sie "umschließt", müssen wir diese verwenden. Z.B:

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

Port 0 wird im Beispiel verwendet, um zu zeigen, dass dies keinen Einfluss auf das Ergebnis hat (standardmäßig ist für diesen Port kein Dienst definiert).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.