在socket.io/Express中记录IP在给定时间内建立的连接数

时间:2016-05-11 18:03:52

标签: node.js express socket.io

为了防止我的应用程序发送垃圾邮件,我正在考虑记录给定IP连接的次数,例如刷新页面或者什么,所以如果它们超过每秒说一秒或一分钟的连接数量,我可以记录他们的IP,我怎么能在Express或socket.io中实现这一点?

1 个答案:

答案 0 :(得分:0)

This answer详细说明了如何获取请求IP。您需要构建一些中间件,以跟踪特定IP请​​求您的服务器的次数。

这是一种粗略的记忆内方法

var ips = {};

app.enable('trust proxy')
app.use(function(req, res, next) {

    if (ips[req.ip]) {
        var tracker = ips[req.ip];

        // If they've accessed less than a minute ago the same route increase count
        if (req.route === tracker.lastRoute && (new Date() - tracker.initReqTimestamp) < 60000) 
            tracker.count++;
        else { // Reset the counter
            tracker.count = 1
            tracker.initReqTimestamp = new Date();
            tracker.lastRoute = req.route;
        }

        ips[req.ip] = tracker;
    }
    else {
      ips[req.ip] = { 
        count: 1, 
        initReqTimestamp: new Date(),
        lastRoute: req.route
      };
    }

  if (ips[req.ip].count > connThreshold)
    // Do something

  else 
    return next(); // Continue to routes
});

// Put your Express Routes below this

就Socket.io而言,this answer详细说明了如何捕获套接字客户端的IP。您还可以编写socket.io middleware来跟踪IP使用与上述Express中间件示例类似的方法建立的连接数。