Javascript 在Node.js中获取客户端主机名

Javascript 在Node.js中获取客户端主机名,javascript,node.js,Javascript,Node.js,是否可以在Node.js中获取主机名 这是我获取客户IP的方式: var ip = request.header('x-forwarded-for'); 那么,如何获取客户端的主机名? var hostname = request.header('???'); 谢谢回复 我认为你能做到这一点的唯一方法是: <form method="post" action="/gethostname"> <label for="hostname">What is your

是否可以在Node.js中获取主机名

这是我获取客户IP的方式:

var ip = request.header('x-forwarded-for');
那么,如何获取客户端的主机名?

var hostname = request.header('???');

谢谢回复

我认为你能做到这一点的唯一方法是:

<form method="post" action="/gethostname">
    <label for="hostname">What is your hostname?</label>
    <input type="text" name="hostname" id="hostname">
</form>

你的主机名是什么?
但我建议你不要真的需要它,你不能用这些信息做任何有用的事情。如果您只想用一个字符串来标识用户的机器,那么您可以编一些东西


如果你真正想要的是FQDN,那么我建议它对你来说仍然不是很有用,但是你需要它。如果您使用的是VPS或类似设备,您可能可以配置您的设备来为您执行此操作,但请注意,这可能需要几秒钟,因此作为响应的一部分执行此操作不是一个好主意。另外请注意,在大多数情况下,您不会获得用户机器的FQDN,而是获得其路由器的FQDN。

我认为这可能会对您有所帮助。这不完全是客户端主机名,而是ip地址

function getClientAddress(req) {
  return req.headers['x-forwarded-for'] || req.connection.remoteAddress;
}

您可以使用“dns”模块进行反向dns查找:

require('dns').reverse('12.12.12.12', function(err, domains) {
    if(err) {
        console.log(err.toString());
        return;
    }
    console.log(domains);
});

请参阅:

如果您使用的是express

然后你可以做如下的事情

var express = require("express"); 
var app = express.createServer();
app.listen(8080);

app.get("/", function (req, res){
    console.log("REQ:: "+req.headers.host);
    res.end(req.headers.host);
});

如果以以下方式使用socket.io,也可以实现同样的效果:

// Setup an example server
var server = require('socket.io').listen(8080);

// On established connection
server.sockets.on('connection', function (socket) {

    // Get server host
    var host = socket.handshake.headers.host;

    // Remove port number together with colon
    host = host.replace(/:.*$/,"");

    // To test it, output to console
    console.log(host);
});

您可以从操作系统模块获取主机名:

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

你凭什么认为他们有一个所以不是每个人都有主机名吗?当然不是,这是一个反向DNS查找,每个人都可能有,也可能没有。实际上,即使HTTPD有这个功能,它也会在现实世界中被禁用。因为它很慢。顺便说一句,X-FORWARDED-FOR是代理头,正确的是REMOTE\u ADDR。(主机名查找时使用远程主机)不正确,如果连接未代理,则使用远程地址。您应该在帖子中更清楚地说明这一点,但+1所有这些都解决了本地开发的问题,并且在Heroku上的应用程序后面有一个反向代理!:)如前所述,如果请求已被代理,则主机标头没有正确的数据。当我尝试此操作时,
req.headers.host
包含服务器的主机名,一直到正在使用的“8080”端口。