【问题标题】:nodejs modify server to accept only requests from array of IPsnodejs 修改服务器以仅接受来自 IP 数组的请求
【发布时间】:2015-12-17 08:56:27
【问题描述】:

我有一个我需要修改的 TCP 服务器,它只接受来自预定义 IP 的请求。我的想法是创建一个数组,包含所有允许的 IP,但是如何进行检查以及如何围绕我现有的代码进行检查?

代码:

// Load the TCP Library
var net = require('net')

 // Start a TCP Server
net.createServer(function (socket) {
    socket.setKeepAlive(true)

    // TODO: Add mysql connection list entry
    console.log('connected', socket.remoteAddress)

    socket.on('close', function(err){
        if (err) throw err;
        // TODO: Add mysql connection list entry
        console.log('disconnected', socket.remoteAddress)
    })
}).listen(5000);

 // Put a friendly message on the terminal of the server.
 console.log("Server running at port 5000");

【问题讨论】:

    标签: arrays node.js ip


    【解决方案1】:

    我认为这是适合这项工作的错误工具。您应该使用系统防火墙配置对应用程序的访问。防火墙允许您:

    • 以灵活的方式选择 IP 范围 例如阻止和允许
    • 使用不同的 ip 版本
    • 使用不同的协议
    • 更好地集成到 IT 基础架构中

    但是,如果您无法访问防火墙并且需要快速而肮脏的东西,您可以通过对照列表检查 ip 地址来轻松终止不在列表中的连接:

    var allow_list = ['10.1.1.1', '10.1.1.2'];
    
    var net = require('net')
    net.createServer(function (socket) {
        if (allow_list.indexOf(socket.remoteAddress) < 0) {       
           socket.destroy();
           return;
        }
    
        socket.setKeepAlive(true)
    
        // do stuff
    }).listen(5000);
    
    console.log("Server running at port 5000");
    

    【讨论】:

    • 检查失败,似乎 NodeJS 正在显示一个丑陋的 IP 地址版本。知道如何解决这个问题吗?例如客户端连接时的输出:connected ::ffff:127.0.0.1你可能看到,它不仅显示IP地址,IP前面还有一些(::ffff:)。
    • 然后将该 ip 放入您的允许列表中,即 ['::ffff:127.0.0.1', '::ffff:10.1.1.1']。这些是 ip6 格式。但就像我说的,你最好通过防火墙控制访问。
    猜你喜欢
    • 2017-07-14
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多