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

时间:2010-11-23 10:52:15

标签: javascript node.js

是否可以在Node.js中获取 hostname

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

var ip = request.header('x-forwarded-for');

那么,我如何获得客户的主机名?

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

感谢您的回复!

6 个答案:

答案 0 :(得分:15)

您可以使用'dns'模块执行反向dns查找:

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

请参阅:http://nodejs.org/docs/v0.3.1/api/all.html#dns.reverse

答案 1 :(得分:14)

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

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

答案 2 :(得分:6)

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

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

但是我建议你不要真的需要它,这并不是说你可以对信息做任何有用的事情。如果你只想要一个字符串来识别用户的机器,那么你可以做些什么。

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

答案 3 :(得分:0)

如果您使用快递,

然后您可以执行以下操作,

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);
});

答案 4 :(得分:0)

如果您以下列方式使用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);
});

答案 5 :(得分:0)

您可以从os模块获取主机名:

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