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

所以,我可能会在这里错过简单的东西,但我似乎无法find一个方法来获取请求对象,我要发送一个响应请求的主机名。

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

如果您正在讨论HTTP请求,则可以在以下位置find请求主机:

 request.headers.host 

但是这依赖于传入的请求。

更多信息,请访问http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest

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

你可以使用os模块:

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

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

注意事项:

  1. 如果您可以使用IP地址 – 机器可能有多个网卡,除非您指定它,否则节点将监听所有这些网卡,因此在进入之前您不知道请求进入了哪个NIC。

  2. 主机名是一个DNS问题 – 不要忘记,几个DNS别名可以指向同一台机器。

如果您需要一个完全合格的域名并且没有HTTP请求,则可以在Linux上使用:

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

首先,在提供答案之前,我希望事先通过信任标题为安全漏洞(如networking钓鱼)打开大门。 因此,为了redirect的目的,不要首先validationURL是否经过授权,否则不要使用头中的值。

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

我能想到的最好的select是获取您的HTTP侦听器公共IP并通过DNSparsing其名称。 请参阅dns.reverse方法以获取更多信息。 但是,再次请注意,IP可能有多个与之关联的名称。