it-swarm.com.de

Liefert den Hostnamen der aktuellen Anfrage in node.js Express

Hier fehlt mir möglicherweise etwas Einfaches, aber ich kann anscheinend keinen Weg finden, um den Hostnamen zu ermitteln, von dem ein Anforderungsobjekt angefordert wurde, an das ich eine Antwort sende.

Ist es möglich herauszufinden, welchen Hostnamen der Benutzer gerade von node.js aus besucht?

153
Jesse

Wenn Sie über eine HTTP-Anfrage sprechen, finden Sie die Anfrage Host in:

request.headers.Host

Dies hängt jedoch von einer eingehenden Anfrage ab.

Mehr unter http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest

Wenn Sie nach Maschinen-/systemeigenen Informationen suchen, probieren Sie das Prozessobjekt aus.

172
cjohn

Sie können das os-Modul verwenden:

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

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

Vorsichtsmaßnahmen:

  1. wenn Sie mit der IP-Adresse arbeiten können - Computer verfügen möglicherweise über mehrere Netzwerkkarten. Wenn Sie diese nicht angeben, überwacht der Knoten alle, sodass Sie nicht wissen, auf welcher NIC die Anforderung eingegangen ist in, bevor es hereinkommt.

  2. Hostname ist eine DNS-Angelegenheit - Vergessen Sie nicht, dass mehrere DNS-Aliase auf denselben Computer verweisen können.

268
stephenbez

Hier ist eine Alternative

req.hostname

Lesen Sie dazu das Express Docs .

12
Eddie

Wenn Sie einen vollständig qualifizierten Domänennamen benötigen und keine HTTP-Anforderung haben, können Sie unter Linux Folgendes verwenden:

var child_process = require("child_process");

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

Bevor ich eine Antwort gebe, möchte ich zunächst einmal klarstellen, dass Sie durch das Vertrauen in Header die Tür zu Sicherheitslücken wie Phishing öffnen. Verwenden Sie für Umleitungszwecke keine Werte aus Kopfzeilen, ohne zuvor zu überprüfen, ob die URL autorisiert ist.

In diesem Fall muss der Hostname Ihres Betriebssystems nicht unbedingt mit dem DNS-Hostnamen übereinstimmen. Tatsächlich kann eine IP mehr als einen DNS-Namen haben. Für HTTP-Zwecke kann daher nicht garantiert werden, dass der Ihrem Computer in Ihrer Betriebssystemkonfiguration zugewiesene Hostname verwendet werden kann.

Die beste Wahl, die ich mir vorstellen kann, ist, die öffentliche IP-Adresse Ihres HTTP-Listeners abzurufen und den Namen über DNS aufzulösen. Siehe die dns.reverse Methode für weitere Informationen. Beachten Sie jedoch, dass einer IP möglicherweise mehrere Namen zugeordnet sind.

5
arboreal84