Как я могу получить FQDN (полное доменное имя) машины, на которой работает узел?
os.gethostname()
недостаточно, поскольку обычно возвращает только неквалифицированное DN. То же самое, dns.reverse(ip, callback)
если предположить, что ip связан с именем хоста, например, получен с использованием dns.lookup(os.gethostname()[, options], callback)
.
Кроме того, выполнение a shell.exec("hostname -f", { silent: true }, cb)
не является опцией, поскольку оно не соответствует POSIX и, таким образом, не будет работать, например, в Solaris et. al., и это действительно плохой взлом, поскольку exec () - очень, очень дорогой вызов по сравнению с. ресурсы, такие как RAM и CPU (вызывает переключение контекста).
$(hostname).$(domainname)
будет работать как на Solaris, так и на Linux. Но Solaris POSIX не только сертифицирован POSIX! Это больше POSIX, чем Linux.Ответы:
Хитрость заключается в том, чтобы использовать
getnameinfo(...)
функцию, предоставляемую ОС, обычно через libc.so или libsocket.so, так как она выполняет поиск по FQDN по умолчанию! Поскольку,dns.lookupService(address, port, callback)
кажется, единственная документированная основная функция nodeJS, которая «оборачивает» ее, нам нужно использовать эту. Например:Порт 0 используется в примере, чтобы показать, что это не влияет на результат (по умолчанию для этого порта не определена служба).
источник