在Node.js中是否可以获取主机名?
以下是我获取客户端IP的方法:
var ip = request.header('x-forwarded-for');
那么,我该如何获取客户端的主机名?
var hostname = request.header('???');
感谢您的回复!
在Node.js中是否可以获取主机名?
以下是我获取客户端IP的方法:
var ip = request.header('x-forwarded-for');
那么,我该如何获取客户端的主机名?
var hostname = request.header('???');
你可以使用'dns'模块进行反向DNS查找:
require('dns').reverse('12.12.12.12', function(err, domains) {
if(err) {
console.log(err.toString());
return;
}
console.log(domains);
});
我觉得这可能会对你有帮助。那不是客户端主机名,而是IP地址。
function getClientAddress(req) {
return req.headers['x-forwarded-for'] || req.connection.remoteAddress;
}
我认为你只能像这样做:
<form method="post" action="/gethostname">
<label for="hostname">What is your hostname?</label>
<input type="text" name="hostname" id="hostname">
</form>
但我建议你并不真的需要它,因为你无法从这些信息中获得任何有用的东西。如果你只是想要一个字符串来识别用户的机器,那么你可以自己编造一个。
如果你真正想要的是FQDN,则我建议这对你仍然没有太大用处,但你需要进行反向DNS查找。如果你在VPS或类似的平台上,你可能可以配置你的服务器来为你执行此操作,但请注意这可能需要几秒钟的时间,因此不建议将其作为响应的一部分进行。另外请注意,在大多数情况下,你将无法获取用户机器的FQDN,而是获取他们路由器的FQDN。
如果你正在使用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);
});
你可以从os模块获取主机名:
var os = require("os");
os.hostname();
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);
});
req.headers.host
包含了服务器的主机名,直到使用的 "8080" 端口。 - Michael