Node JS - dapatkan FQDN [ditutup]


8

Bagaimana saya bisa mendapatkan FQDN (Fully Qualified Domain Name) dari mesin yang menjalankan node?

os.gethostname()tidak cukup, karena biasanya hanya mengembalikan DN yang tidak memenuhi syarat. Hal yang sama untuk dns.reverse(ip, callback)- dengan asumsi ip adalah yang terkait dengan nama host, misalnya diperoleh dengan menggunakan dns.lookup(os.gethostname()[, options], callback).

Juga melakukan a shell.exec("hostname -f", { silent: true }, cb)bukanlah suatu pilihan, karena itu tidak sesuai dengan POSIX dan dengan demikian akan gagal misalnya pada Solaris et. al., dan ini adalah hack yang sangat buruk, karena exec () adalah panggilan telepon yang sangat, sangat mahal . sumber daya seperti RAM dan CPU (menyebabkan pengalihan konteks).


$(hostname).$(domainname)akan bekerja pada Solaris dan Linux. Tapi, Solaris POSIX bukan saja, tapi juga bersertifikat POSIX! Ini lebih POSIX daripada Linux.
Will

3
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena ini seharusnya dipindahkan ke SO
Anthon

Jawaban:


10

Caranya adalah dengan memanfaatkan getnameinfo(...)fungsi yang disediakan oleh OS biasanya melalui libc.so atau libsocket.so, karena ia melakukan pencarian FQDN secara default! Karena dns.lookupService(address, port, callback)tampaknya satu-satunya fungsi inti nodeJS yang terdokumentasi, yang "membungkusnya", kita perlu menggunakan yang ini. Misalnya:

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 digunakan dalam contoh untuk menunjukkan bahwa ini tidak mempengaruhi hasil (secara default tidak ada layanan yang ditentukan untuk port ini).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.