是否可以在Node.js中获取 hostname ?
这就是我获取客户IP的方式:
var ip = request.header('x-forwarded-for');
那么,我如何获得客户的主机名?
var hostname = request.header('???');
感谢您的回复!
答案 0 :(得分:15)
您可以使用'dns'模块执行反向dns查找:
require('dns').reverse('12.12.12.12', function(err, domains) {
if(err) {
console.log(err.toString());
return;
}
console.log(domains);
});
答案 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();