Donc, il me manque peut-être quelque chose de simple ici, mais je n'arrive pas à trouver un moyen d'obtenir le nom d'hôte auquel un objet de requête auquel j'envoie une réponse a été demandé.
Est-il possible de déterminer quel nom d'hôte l'utilisateur visite actuellement à partir de node.js?
request.headers.host
- merci!Réponses:
Si vous parlez d'une requête HTTP, vous pouvez trouver l'hôte de la requête dans:
Mais cela dépend d'une demande entrante.
Plus d'informations sur http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest
Si vous recherchez des informations machine / natives, essayez l'objet de processus.
la source
request.headers.host
renvoiehttp://127.0.0.1
mais pas un nom de domaine de serveur de productionreq.headers.host
est fourni par l'utilisateur. Je peux créer une requête en 1 ligne de python et vous envoyer une requête sans que ce champ ne fasse planter votre codeVous pouvez utiliser le module os:
Voir http://nodejs.org/docs/latest/api/os.html#os_os_hostname
Mises en garde:
si vous pouvez travailler avec l'adresse IP - Les machines peuvent avoir plusieurs cartes réseau et à moins que vous ne le spécifiiez, le nœud les écoutera toutes, de sorte que vous ne savez pas sur quelle carte réseau la demande est arrivée, avant qu'elle n'arrive.
Le nom d'hôte est une question DNS - N'oubliez pas que plusieurs alias DNS peuvent pointer vers la même machine.
la source
hostname
commande qui doit être un nom DNS valide mais qui n'est pas obligatoire. Par exemple, sous OS X, vous obtiendrez des noms comme ceuxmy-machine.local
qui ne peuvent pas être résolus avec DNS. Pour déterminer l'adresse IP externe de la machine, vous devrez accéder à un service qui exécute cette fonction ou utiliser le protocole STUN pour le comprendre.Voici une alternative
Lisez à ce sujet dans les documents Express .
la source
Si vous avez besoin d'un nom de domaine complet et que vous n'avez pas de requête HTTP, sous Linux, vous pouvez utiliser:
la source
hostname
commande dans Windows (mais vous l'Tout d'abord, avant de fournir une réponse, j'aimerais être franc sur le fait qu'en faisant confiance aux en-têtes, vous ouvrez la porte à des vulnérabilités de sécurité telles que le phishing. Donc, à des fins de redirection, n'utilisez pas les valeurs des en-têtes sans avoir préalablement validé que l'URL est autorisée.
Ensuite, le nom d'hôte de votre système d'exploitation peut ne pas nécessairement correspondre à celui du DNS. En fait, une adresse IP peut avoir plus d'un nom DNS. Par conséquent, à des fins HTTP, il n'y a aucune garantie que le nom d'hôte attribué à votre machine dans la configuration de votre système d'exploitation soit utilisable.
Le meilleur choix auquel je puisse penser est d'obtenir votre adresse IP publique d'écoute HTTP et de résoudre son nom via DNS. Voir la
dns.reverse
méthode pour plus d'informations. Mais là encore, notez qu'une adresse IP peut être associée à plusieurs noms.la source