it-swarm.cn

在node.js Express中获取当前请求的主机名

所以,我可能在这里遗漏了一些简单的东西,但我似乎无法找到一种方法来获取我要发送响应的请求对象的主机名。

是否有可能从node.js中找出用户当前访问的主机名?

152
Jesse

如果您正在谈论HTTP请求,可以在以下位置找到请求主机:

request.headers.Host

但这取决于传入的请求。

更多在 http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest

如果您正在寻找机器/本机信息,请尝试过程对象。

166
cjohn

你可以使用os模块:

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

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

注意事项:

  1. 如果你可以使用IP地址 - 机器可能有几个网卡,除非你指定它,节点将监听所有这些,所以你不知道请求来自哪个NIC它进来了。

  2. 主机名是DNS问题 - 不要忘记多个DNS别名可以指向同一台计算机。

268
stephenbez

这是另一种选择

req.hostname

请阅读 Express Docs

8
Eddie

如果您需要完全限定的域名且没有HTTP请求,则可以在Linux上使用:

var child_process = require("child_process");

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

首先,在提供答案之前,我想提前了解一下这样一个事实:通过信任标题,您正在打开网络钓鱼等安全漏洞的大门。因此,出于重定向的目的,如果没有首先验证URL是否经过授权,请不要使用标头中的值。

然后,您的操作系统主机名可能不一定与DNS匹配。实际上,一个IP可能有多个DNS名称。因此,对于HTTP目的,无法保证在操作系统配置中分配给您的计算机的主机名是可用的。

我能想到的最佳选择是获取HTTP侦听器公共IP并通过DNS解析其名称。有关详细信息,请参阅dns.reverse方法。但是,再次注意,IP可能有多个与之关联的名称。

5
arboreal84