• Что нужно сделать, что бы ipset после reboot сервера сохранял сеты?

    @xbox
    Простое и рабочее решение, развивая совет "Max_rip".

    "Max_rip" дал отличный совет "/etc/init.d/iptables-persistent, Добавит туда ipset save / ipset restore ". Только из-за того, что в слове "добавит" пропущен мягкий знак смысл его при первом прочтении теряется и кажется, что /etc/init.d/iptables-persistent должен все автоматически делать. Я попробовал - автоматически не получается. iptables-persistent сохраняет настройки iptables, но без напильника не сохраняет сеты ipset.

    Вот что имелось ввиду в совете и то, что мне помогло:

    Для начала должен быть установлен пакет iptables-persistent. На Debian устанавливаем так
    apt-get install iptables-persistent

    Этот пакет нам позволит сохранять командой из консоли правила IPTABLES. После перезагрузки правила iptables сбрасываться перестанут.

    Далее редактируем скрипт запуска /etc/init.d/iptables-persistent
    Находим секуцию save_rules() и дописываем в нее вначале строку
    ipset save > /etc/ipset.rules
    Это будет сохранять сеты IPSET при каждом сохранении правил iptables с помощью iptables-persistent.

    После этого находим секцию load_rules() и добавляем вначале строку
    ipset restore < /etc/ipset.rules
    Это будет загружать сеты IPSET при каждой загрузке правил iptables с помощью iptables-persistent.

    Этот вариант на мой взгляд самый удобный. Одной командой из консоли cохраняются и правила iptables и сеты Ipset. После перезагрузки правила сохранятся.
    service iptables-persistent save

    Удачи.
    Ответ написан
    Комментировать
  • QT QFile С++ Как считать из файла числа в массив?

    EXL
    @EXL
    Энтузиаст
    #include <QVector>
    #include <QFile>
    #include <QString>
    #include <QTextStream>
    #include <QStringList>
    
    #include <iostream>
    
    const QString allFileToString(QFile &aFile)
    {
        if (!aFile.open(QFile::ReadOnly | QFile::Text)) {
            std::cout << "Error opening file!" << std::endl;
            return NULL;
        }
        QTextStream in(&aFile);
        return in.readAll();
    }
    
    void setDataToVector(const QStringList &aStringList,
                         QVector< QVector <int> > &aVector)
    {
        size_t x = aStringList.size() - 1; // Count of line, 8
        size_t y = aStringList.at(0).count("\t") + 1; // Count of digits in line, 6
    
        for (size_t i = 0; i < x; ++i) {
            QVector<int> temp_vector;
            for (size_t j = 0; j < y; ++j) {
                temp_vector.push_back(aStringList.at(i).split("\t").at(j).toInt());
            }
            aVector.push_back(temp_vector);
        }
    }
    
    void printVector(const QVector< QVector <int> > &aVector)
    {
        for (int i = 0; i < aVector.size(); ++i) {
            for (int j = 0; j < aVector.at(0).size(); ++j) {
                std::cout << aVector.at(i).at(j) << "\t";
            }
            std::cout << std::endl;
        }
    }
    
    int main(/*int argc, char *argv[]*/)
    {
        QVector< QVector <int> > vector;
        QFile file("test.txt");
    
        setDataToVector(allFileToString(file).split("\n"), vector);
    
        printVector(vector);
    
        return 0;
    }
    Ответ написан
    1 комментарий