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

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


当前回答

首先,在提供答案之前,我想坦率地说明一个事实,即通过信任头文件,您正在为网络钓鱼等安全漏洞打开大门。因此,对于重定向目的,在没有首先验证URL是否被授权之前,不要使用头中的值。

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

我能想到的最佳选择是获取您的HTTP侦听器公共IP,并通过DNS解析其名称。查看dns。反向方法获取更多信息。但是,请再次注意,一个IP可能有多个与之关联的名称。

其他回答

首先,在提供答案之前,我想坦率地说明一个事实,即通过信任头文件,您正在为网络钓鱼等安全漏洞打开大门。因此,对于重定向目的,在没有首先验证URL是否被授权之前,不要使用头中的值。

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

我能想到的最佳选择是获取您的HTTP侦听器公共IP,并通过DNS解析其名称。查看dns。反向方法获取更多信息。但是,请再次注意,一个IP可能有多个与之关联的名称。

要么从前端头文件中传递并获取它,要么简单地将它放在。env中,其中。env文件被.gitignore忽略,因此对于每个服务器环境,您将拥有不同的.env,其中包含该服务器的主机字符串

.env代码

HOSTNAME=example.com

文件你想要的hotname。

const dotenv = require("dotenv");
dotenv.config();

console.log('hostname: '+process.env.HOSTNAME)

输出:

hostname: example.com

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

var child_process = require("child_process");

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

你可以使用os Module:

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

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

警告:

如果你能用IP地址 机器可能有几个网卡,除非你指定了它,否则节点会监听所有的网卡,所以你不知道请求是在哪个网卡上传入的。 主机名是DNS的问题 不要忘记,多个DNS别名可以指向同一台机器。

我认为你想要的是识别跨源请求,你应该使用Origin头文件。

const origin = req.get('origin');

使用这个你可以得到一个请求客户端URL