Por lo tanto, es posible que me falte algo simple aquí, pero parece que no puedo encontrar una manera de obtener el nombre de host para el que se solicitó un objeto de solicitud al que estoy enviando una respuesta.
¿Es posible averiguar qué nombre de host está visitando actualmente el usuario desde node.js?
request.headers.host
, ¡gracias!Respuestas:
Si está hablando de una solicitud HTTP, puede encontrar el host de solicitud en:
Pero eso se basa en 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 de proceso.
fuente
request.headers.host
devuelvehttp://127.0.0.1
pero no un nombre de dominio del servidor de producciónreq.headers.host
es proporcionado por el usuario. Puedo elaborar una solicitud en 1 línea de python y enviarle una solicitud sin que ese campo haga que su código se bloqueePuede usar el módulo os:
Ver http://nodejs.org/docs/latest/api/os.html#os_os_hostname
Advertencias:
si puede trabajar con la dirección IP: las máquinas pueden tener varias tarjetas de red y, a menos que lo especifique, el nodo las escuchará en todas, por lo que no sabe en qué NIC ingresó la solicitud antes de que entre.
El nombre de host es una cuestión de DNS: no olvide que varios alias de DNS pueden apuntar a la misma máquina.
fuente
hostname
comando que debe ser un nombre DNS válido pero que no es obligatorio. Por ejemplo, en OS X obtendrá nombres como losmy-machine.local
que no se pueden resolver con DNS. Para determinar la IP externa de la máquina, deberá acceder a un servicio que realice esta función o utilizar el protocolo STUN para resolverlo.Aquí hay una alternativa
Lea sobre esto en Express Docs .
fuente
Si necesita un nombre de dominio completo y no tiene una solicitud HTTP, en Linux, puede usar:
fuente
hostname
comando en Windows (pero loEn primer lugar, antes de dar una respuesta, me gustaría ser sincero 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 redireccionamiento, no use valores de encabezados sin primero validar que 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 sea utilizable.
La mejor opción que puedo pensar es obtener su IP pública de escucha HTTP y resolver su nombre a través de DNS. Vea el
dns.reverse
método para más información. Pero, de nuevo, tenga en cuenta que una IP puede tener múltiples nombres asociados.fuente