节点js传入请求sourceIP

时间:2012-10-25 07:07:31

标签: node.js

例如:

http.createServer(function (request, response) {
   request.on("end", function () {

   });
});

使用Request,如何找到请求的源IP?

2 个答案:

答案 0 :(得分:1)

根据请求是通过代理转发还是直接连接,源IP地址可以存储在不同的位置。您必须先检查req.header['x-forwarded-for'],然后再req.connection.remoteAddress。此gist中显示了一个示例函数。

答案 1 :(得分:0)

这是一个有效的例子:

var http = require('http');

var getClientIp = function(req) {
  var ipAddress = null;
  var forwardedIpsStr = req.headers['x-forwarded-for'];
  if (forwardedIpsStr) {
    ipAddress = forwardedIpsStr[0];
  }
  if (!ipAddress) {
    ipAddress = req.connection.remoteAddress;
  }
  return ipAddress;
};

var server = http.createServer();

server.on('request', function(req, res) {
  console.log(getClientIp(req));
  res.writeHead(200, {'Content-Type': 'text/plain'});
  return res.end('Hello World\n');
});

server.listen(9000, 'localhost');

getClientIp函数取自here并进行了一些细微更改。请注意,x-forwarded-for的内容是一个包含代理IP的数组(更多here),因此您可能希望检查的不仅仅是第一个元素。