在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 hostname?</label> <input type="text" name="hostname" id="hostname"> </form>
但是我build议你不需要它,这不像你可以做任何有用的信息。 如果你只是想要一个string来识别用户的机器,那么你可以做一些事情。
如果你真的以后是FQDN,那么我会build议它对你没有什么用处,但是为此你需要反向DNS查询 。 如果你使用的是VPS或类似的软件,你可以configuration你的盒子来为你做这个,但是请注意,这可能需要几秒钟的时间,因此作为响应的一部分不是一个好主意。 另外请注意,在大多数情况下,您将不会获得用户计算机的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); });
请参阅: http : //nodejs.org/docs/v0.3.1/api/all.html#dns.reverse
如果你使用快递,
那么你可以做如下,
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); });