Nút Node - nhận FQDN [đã đóng]


8

Làm cách nào tôi có thể nhận được FQDN (Tên miền đủ điều kiện) của máy trên nút nào đang chạy?

os.gethostname()là không đủ, vì nó thường trả về DN không đủ tiêu chuẩn. Điều tương tự cho dns.reverse(ip, callback)- giả sử ip là cái được liên kết với tên máy chủ, ví dụ như thu được bằng cách sử dụng dns.lookup(os.gethostname()[, options], callback).

Ngoài ra, thực hiện shell.exec("hostname -f", { silent: true }, cb)không phải là một tùy chọn, vì nó không tuân thủ POSIX và do đó sẽ thất bại, ví dụ như trên Solaris et. al., và nó là một hack thực sự xấu, vì exec () là một wrt cuộc gọi rất, rất tốn kém . tài nguyên như RAM và CPU (gây ra chuyển đổi ngữ cảnh).


$(hostname).$(domainname)sẽ hoạt động trên cả Solaris và Linux. Nhưng, không chỉ Solaris POSIX, nó còn được chứng nhận POSIX! Đó là POSIX nhiều hơn Linux.
Sẽ

3
Tôi đang bỏ phiếu để đóng câu hỏi này ngoài chủ đề vì điều này đáng lẽ đã được chuyển sang SO
Anthon

Câu trả lời:


10

Mẹo nhỏ là sử dụng getnameinfo(...)chức năng do HĐH cung cấp thường thông qua libc.so hoặc libsocket.so, vì nó mặc định là tìm kiếm FQDN! Bởi vì dns.lookupService(address, port, callback)dường như là hàm coreJS tài liệu duy nhất được "ghi lại", nên chúng ta cần sử dụng hàm này. Ví dụ:

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

Cổng 0 được sử dụng trong ví dụ để chỉ ra rằng điều này không ảnh hưởng đến kết quả (theo mặc định không có dịch vụ nào được xác định cho cổng này).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.