Получить имя хоста текущего запроса в node.js Express - PullRequest
153 голосов
/ 22 сентября 2011

Итак, я могу упустить что-то простое здесь, но я не могу найти способ получить имя хоста, с которого был запрошен объект запроса, на который я отправляю ответ.

Это так?можно выяснить, какое имя хоста пользователь посещает в данный момент из node.js?

Ответы [ 5 ]

268 голосов
/ 22 февраля 2012

Вы можете использовать модуль os:

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

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

Предостережения:

  1. если вы можете работать с IP-адресом - Машины могут иметь несколько сетевых карт, и если вы не укажете их, узел будет прослушивать их все, поэтому вы не знаете, на какой сетевой адаптер поступил запрос, прежде чем он поступит.

  2. Имя хоста является вопросом DNS - Не забывайте, что несколько псевдонимов DNS могут указывать на один и тот же компьютер.

171 голосов
/ 22 сентября 2011

Если вы говорите о HTTP-запросе, вы можете найти хост запроса в:

request.headers.host

Но это зависит от входящего запроса.

Больше на http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest

Если вы ищете машинную / собственную информацию, попробуйте объект процесса.

10 голосов
/ 08 февраля 2018

Вот альтернативный вариант

req.hostname

Прочтите об этом в Экспресс-документах .

7 голосов
/ 05 октября 2014

Если вам нужно полное доменное имя и нет HTTP-запроса, в Linux вы можете использовать:

var child_process = require("child_process");

child_process.exec("hostname -f", function(err, stdout, stderr) {
  var hostname = stdout.trim();
});
5 голосов
/ 27 июля 2016

Прежде всего, прежде чем дать ответ, я хотел бы быть в курсе того факта, что доверяя заголовкам, вы открываете дверь для уязвимостей безопасности, таких как фишинг. Поэтому для целей перенаправления не используйте значения из заголовков без предварительной проверки URL-адреса.

Тогда имя вашей операционной системы может не совпадать с именем DNS. Фактически, один IP может иметь более одного DNS-имени. Таким образом, для целей HTTP нет гарантии, что имя хоста, назначенное вашему компьютеру в конфигурации вашей операционной системы, пригодно для использования.

Лучший выбор, который я могу придумать, - это получить публичный IP-адрес прослушивателя HTTP и разрешить его имя через DNS. См. dns.reverse метод для получения дополнительной информации. Но опять же, обратите внимание, что IP может иметь несколько имен, связанных с ним.

...