¿Cómo puedo obtener el FQDN (nombre de dominio completo) de la máquina en la que se ejecuta el nodo?
os.gethostname()
no es suficiente, ya que generalmente solo devuelve el DN no calificado. Lo mismo para dns.reverse(ip, callback)
: suponiendo que la ip es la asociada con el nombre de host, por ejemplo, obtenida usando dns.lookup(os.gethostname()[, options], callback)
.
Tampoco shell.exec("hostname -f", { silent: true }, cb)
es una opción, ya que no es compatible con POSIX y, por lo tanto, fallará, por ejemplo, en Solaris et. al., y es un hack realmente malo, ya que exec () es una llamada muy, muy costosa wrt. recursos como RAM y CPU (provoca cambio de contexto).
$(hostname).$(domainname)
funcionará tanto en Solaris como en Linux. Pero, no solo es Solaris POSIX, ¡tiene certificación POSIX! Es más POSIX que Linux.Respuestas:
El truco consiste en utilizar la
getnameinfo(...)
función proporcionada por el sistema operativo generalmente a través de libc.so o libsocket.so, ¡ya que realiza una búsqueda de FQDN por defecto! Debido a quedns.lookupService(address, port, callback)
parece ser la única función central documentada de nodeJS, que la "envuelve", necesitamos usar esta. P.ej:El puerto 0 se usa en el ejemplo para mostrar que esto no tiene influencia en el resultado (por defecto no hay un servicio definido para este puerto).
fuente