Como posso obter o FQDN (nome de domínio totalmente qualificado) da máquina na qual o nó está sendo executado?
os.gethostname()
não é suficiente, pois geralmente retorna apenas o DN não qualificado. A mesma coisa para dns.reverse(ip, callback)
- assumindo que o ip é o associado ao nome do host, por exemplo, obtido usando dns.lookup(os.gethostname()[, options], callback)
.
Também fazer a shell.exec("hostname -f", { silent: true }, cb)
não é uma opção, pois não é compatível com POSIX e, portanto, falhará, por exemplo, no Solaris et. e é um hack muito ruim, já que exec () é uma chamada muito, muito cara . recursos como RAM e CPU (causa a alternância de contexto).
$(hostname).$(domainname)
funcionará no Solaris e Linux. Mas, além do Solaris POSIX, é certificado pelo POSIX! É mais POSIX que o Linux.Respostas:
O truque é utilizar a
getnameinfo(...)
função fornecida pelo sistema operacional normalmente via libc.so ou libsocket.so, pois ele faz uma pesquisa no FQDN por padrão! Comodns.lookupService(address, port, callback)
parece ser a única função principal do nodeJS documentada, que a "envolve", precisamos usar essa. Por exemplo:A porta 0 é usada no exemplo para mostrar que isso não influencia o resultado (por padrão, não há serviço definido para esta porta).
fonte