web-dev-qa-db-fra.com

Récupère le nom d'hôte de la requête en cours dans node.js Express

Donc, il se peut que je manque quelque chose de simple ici, mais je n'arrive pas à trouver un moyen d'obtenir le nom d'hôte pour lequel un objet de requête auquel j'ai envoyé une réponse a été demandé.

Est-il possible de savoir quel nom d’hôte l’utilisateur est en train de visiter depuis node.js?

153
Jesse

Si vous parlez d'une requête HTTP, vous pouvez trouver l'hôte de la requête dans:

request.headers.Host

Mais cela repose sur une requête entrante.

Plus à http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest

Si vous recherchez des informations machine/natives, essayez l'objet processus.

172
cjohn

Vous pouvez utiliser le module os:

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

Voir http://nodejs.org/docs/latest/api/os.html#os_os_hostname

Mises en garde:

  1. si vous pouvez utiliser l'adresse IP - les ordinateurs peuvent disposer de plusieurs cartes réseau et, à moins que vous ne le spécifiiez, le nœud écoutera toutes les cartes. Vous ne savez donc pas sur quel NIC la requête est arrivée, avant il entre.

  2. Le nom d'hôte est une affaire de DNS - N'oubliez pas que plusieurs alias DNS peuvent pointer vers le même ordinateur.

268
stephenbez

Voici une alternative

req.hostname

Lisez à ce sujet dans Express Docs .

12
Eddie

Si vous avez besoin d'un nom de domaine complet et que vous n'avez pas de requête HTTP, vous pouvez utiliser sous Linux:

var child_process = require("child_process");

child_process.exec("hostname -f", function(err, stdout, stderr) {
  var hostname = stdout.trim();
});
7
dricket

Tout d’abord, avant d’apporter une réponse, je voudrais dire franchement qu’en faisant confiance aux en-têtes, vous ouvrez la porte à des vulnérabilités en matière de sécurité telles que le phishing. Donc, à des fins de redirection, n'utilisez pas les valeurs des en-têtes sans d'abord valider l'URL autorisée.

Ensuite, le nom d’hôte de votre système d’exploitation peut ne pas nécessairement correspondre au nom DNS. En fait, une adresse IP peut avoir plusieurs noms DNS. Donc, pour les besoins HTTP, il n’est pas garanti que le nom d’hôte attribué à votre ordinateur 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'audience HTTP et de résoudre son nom via DNS. Voir la méthode dns.reverse pour plus d'informations. Mais encore une fois, notez qu’une adresse IP peut être associée à plusieurs noms.

5
arboreal84