노드를 실행하는 컴퓨터의 FQDN(정규화된 도메인 이름)을 얻으려면 어떻게 해야 합니까?
os.gethostname()
일반적으로 정규화되지 않은 DN만 반환하므로 충분하지 않습니다. 마찬가지입니다 dns.reverse(ip, callback)
. ip가 호스트 이름과 연결된 IP라고 가정합니다 dns.lookup(os.gethostname()[, options], callback)
.
또한 a를 하는 shell.exec("hostname -f", { silent: true }, cb)
것은 선택 사항이 아닙니다.POSIX 표준을 준수하지 않음예를 들어 Solaris 등에서는 실패합니다. 잠깐, 이것은 정말 나쁜 해킹입니다. 왜냐하면 exec()는 매우 매우값비싼전화주세요. RAM 및 CPU와 같은 리소스(컨텍스트 전환 유발)
답변1
getnameinfo(...)
비결은 기본적으로 FQDN 조회를 수행하므로 일반적으로 libc.so 또는 libsocket.so를 통해 운영 체제에서 제공하는 기능을 활용하는 것입니다 . 이를 "래핑"하는 문서화된 유일한 nodeJS 핵심 함수인 것 같으 므로 dns.lookupService(address, port, callback)
이를 사용해야 합니다. 예를 들어:
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);
});
});
예제에서는 포트 0이 결과에 영향을 미치지 않음을 보여주기 위해 사용되었습니다(기본적으로 이 포트에 대해 정의된 서비스가 없습니다).