Obtener el nombre de host de la solicitud actual en el nodo.js Express


Por lo tanto, puede que me falte algo simple aquí, pero parece que no puedo encontrar una manera de obtener el nombre de host desde el que se solicitó un objeto de solicitud al que estoy enviando una respuesta.

¿Es posible averiguar qué nombre de host está visitando el usuario actualmente desde node?js?

Author: B T, 2011-09-22

5 answers

Si estás hablando de una solicitud HTTP, puedes encontrar el host de la solicitud en:

request.headers.host

Pero eso depende de una solicitud entrante.

Más en http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest

Si está buscando información de máquina/nativa, pruebe el objeto process.

 152
Author: cjohn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-23 13:57:37

Puede utilizar el módulo os:

var os = require("os");
os.hostname();

Véase http://nodejs.org/docs/latest/api/os.html#os_os_hostname

Advertencias:

  1. Si puede trabajar con la dirección IP -- Las máquinas pueden tener varias tarjetas de red y, a menos que se especifique, el nodo escuchará en todas ellas, por lo que no sabrá en qué NIC entró la solicitud, antes de que llegue.

  2. El nombre de host es un asunto DNS -- No olvide que varios alias DNS pueden apuntar al mismo equipo.

 263
Author: stephenbez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-19 18:19:31

Si necesita un nombre de dominio completo y no tiene ninguna solicitud HTTP, en Linux, puede usar:

var child_process = require("child_process");

child_process.exec("hostname -f", function(err, stdout, stderr) {
  var hostname = stdout.trim();
});
 7
Author: dricket,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-05 06:37:35

En primer lugar, antes de proporcionar una respuesta, me gustaría ser franco sobre el hecho de que al confiar en los encabezados, está abriendo la puerta a vulnerabilidades de seguridad como el phishing. Por lo tanto, para fines de redirección, no use valores de encabezados sin validar primero la URL está autorizada.

Entonces, el nombre de host de su sistema operativo podría no coincidir necesariamente con el DNS. De hecho, una IP puede tener más de un nombre DNS. Por lo tanto, para fines HTTP no hay garantía de que el nombre de host asignado a su máquina en la configuración de su sistema operativo es utilizable.

La mejor opción que se me ocurre es obtener su IP pública del receptor HTTP y resolver su nombre a través de DNS. Consulte el método dns.reverse para obtener más información. Pero luego, de nuevo, tenga en cuenta que una IP puede tener varios nombres asociados con ella.

 5
Author: arboreal84,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-27 20:35:25

Aquí hay una alternativa

req.hostname

Lea al respecto en los documentos de Express.

 2
Author: Eddie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-08 03:41:46