Untitled

 avatar
unknown
plain_text
2 years ago
4.3 kB
4
Indexable
#include "httplib.hpp"
#include "json.hpp"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>
#include <thread>
#include <filesystem>

using namespace std;

httplib::SSLServer server("cert.pem", "key.pem");
string server_data;

const char* gov = R"(
    <style>
        h1 {
            text-align: center;
        }
    </style>
    <body>
        <h1>
            <b><big>Unauthorized Access</big></b>
        </h1>
    </body>
)";

class Connection {
public:
    string ip = "";
    int attempts = 0;
};

vector<Connection> connection_data;

// JSON dosyasındaki server_ip ve server_port değerlerini kontrol et
bool checkConfig() {
    nlohmann::json config;
    ifstream config_file("config.json");
    if (config_file.is_open()) {
        config_file >> config;

        if (config.contains("server_ip") && config.contains("server_port")) {
            server_data = "server|" + config["server_ip"].get<string>() + "\nport|" +
                           to_string(config["server_port"].get<int>()) +
                           "\ntype|1\nmeta|cmeta\nRTENDMARKERBS1001";
            return true;
        } else {
            cout << "Hata: 'config.json' dosyasında 'server_ip' ve 'server_port' bulunamadı." << endl;
        }
    } else {
        cout << "Hata: 'config.json' dosyası okunamıyor." << endl;
    }
    return false;
}

// JSON dosyasına bağlantı verilerini kaydet
void saveConnectionData() {
    nlohmann::json j;
    for (const auto& connection : connection_data) {
        nlohmann::json entry;
        entry["ip"] = connection.ip;
        entry["attempts"] = connection.attempts;
        j.push_back(entry);
    }

    ofstream w("connection.json");
    w << setw(2) << j;
}

// JSON dosyasından bağlantı verilerini yükle
void loadConnectionData() {
    nlohmann::json j;
    ifstream r("connection.json");
    if (r.is_open()) {
        r >> j;
        for (const auto& entry : j) {
            Connection connection;
            connection.ip = entry["ip"];
            connection.attempts = entry["attempts"];
            connection_data.push_back(connection);
        }
    }
}

void append_reset(string ip) {
    while (true) {
        for (auto& connection : connection_data) {
            if (connection.ip == ip) {
                if (connection.attempts > 3) {
                    this_thread::sleep_for(4s);
                    connection.attempts -= 3;
                } else {
                    if (connection.attempts <= 0) continue; // Geç
                    this_thread::sleep_for(1800ms);
                    connection.attempts -= 1;
                }

                saveConnectionData();
            }
        }
        this_thread::sleep_for(5ms);
    }
}

bool handle_request(const httplib::Request req) {
    bool new_connection = true;

    for (auto& connection : connection_data) {
        if (connection.ip == req.remote_addr) {
            new_connection = false;
            connection.attempts++;
            if (connection.attempts > 3) {
                backtasks.emplace_back(append_reset, req.remote_addr);
                return false;
            }

            saveConnectionData();
            break;
        }
    }

    if (new_connection) {
        Connection new_data;
        new_data.ip = req.remote_addr;
        new_data.attempts = 1;
        connection_data.push_back(new_data);
        saveConnectionData();
    }

    return true;
}

int main() {
    if (!checkConfig()) {
        cout << "Hata: Config dosyası kontrolü başarısız. Program sonlandırılıyor." << endl;
        return 1;
    }

    cout << "Growtopia HTTPS developed by Ametsa77" << endl;

    loadConnectionData();

    server.Post(("/growtopia/server_data.php"), [&](const auto& req, auto& res) {
        future<bool> Request = async(handle_request, req);
        Request.wait();
        if (!Request.get()) {
            cout << req.remote_addr << " has blocked due to attack suspicion" << endl;
            return;
        }
        cout << req.remote_addr << " has connected to server" << endl;
        res.set_content(server_data, "text/plain");
    });

    server.Get(("/growtopia/server_data.php"), [&](const auto& req, auto& res) {
        res.set_content(gov, "text/html");
    });

    server.listen("0.0.0.0", 443);

    return 0;
}
Editor is loading...
Leave a Comment