ebpf-blocker
1.0.0
XDP-based packet blocker using eBPF
Loading...
Searching...
No Matches
db.h
Go to the documentation of this file.
1
/// \file db.h
2
/// \brief Обёртка SQLite-базы данных и утилиты парсинга CIDR.
3
/// \details Предоставляет RAII-обёртку над SQLite3 (BlockerDB),
4
/// парсер CIDR-нотации и конвертер IP-адресов.
5
6
#ifndef DB_H
7
#define DB_H
8
9
#include <cstdint>
10
#include <sqlite3.h>
11
#include <string>
12
#include <vector>
13
14
/// Одна запись (IP/CIDR + комментарий) для whitelist или blacklist.
15
struct
BlockEntry
{
16
std::string
ip
;
///< IP-адрес или CIDR-нотация, например "10.0.0.0/8".
17
std::string
comment
;
///< Человекочитаемый комментарий.
18
};
19
20
/// Распарсенное представление CIDR-подсети.
21
struct
CIDR
{
22
uint32_t
ip
;
///< IP-адрес в network byte order с применённой маской.
23
uint32_t
prefixlen
;
///< Длина префикса (0-32). 32 означает одиночный хост.
24
};
25
26
/// Парсит CIDR-строку (например "192.168.1.0/24") в структуру \ref CIDR.
27
/// @param[in] str Входная строка в формате "IP" или "IP/длина_префикса".
28
/// @return Распарсенный CIDR (ip в network byte order, с маской).
29
/// @throws std::invalid_argument при некорректном IP или длине префикса.
30
CIDR
ParseCIDR
(
const
std::string &str);
31
32
/// Конвертирует 32-битный IP (network byte order) в dotted-decimal строку.
33
/// @param[in] ip IP-адрес в network byte order.
34
/// @return Строка вида "192.168.1.1".
35
std::string
IPToString
(uint32_t ip);
36
37
/// RAII-обёртка над SQLite3 для хранения белого и чёрного списков.
38
///
39
/// Управляет подключением к базе данных, создаёт таблицы при первом запуске
40
/// и предоставляет методы для чтения и обновления записей.
41
class
BlockerDB
{
42
public
:
43
/// Открывает (или создаёт) базу данных по указанному пути.
44
/// @param[in] path Путь к файлу SQLite-базы данных.
45
/// @throws std::runtime_error если не удалось открыть БД.
46
explicit
BlockerDB
(
const
std::string &path);
47
~BlockerDB
();
48
49
BlockerDB
(
const
BlockerDB
&) =
delete
;
50
BlockerDB
&
operator=
(
const
BlockerDB
&) =
delete
;
51
BlockerDB
(
BlockerDB
&&) =
delete
;
52
BlockerDB
&
operator=
(
BlockerDB
&&) =
delete
;
53
54
/// Создаёт таблицы, если они не существуют; применяет миграции схемы.
55
///
56
/// Включает WAL-режим журнала. Идемпотентна.
57
/// @throws std::runtime_error если SQL миграции завершился ошибкой.
58
void
Migrate
();
59
60
/// Возвращает все записи белого списка из базы данных.
61
/// @return Вектор записей BlockEntry.
62
std::vector<BlockEntry>
GetWhitelist
();
63
/// Возвращает все записи чёрного списка из базы данных.
64
/// @return Вектор записей BlockEntry.
65
std::vector<BlockEntry>
GetBlacklist
();
66
67
/// Обновляет last_blocked_at текущим временем для указанного IP.
68
///
69
/// Также обновляет любую CIDR-запись, покрывающую этот IP.
70
/// @param[in] ip IP-адрес источника в network byte order.
71
void
UpdateLastBlockedAt
(uint32_t ip);
72
73
private
:
74
sqlite3 *
db_
;
///< Указатель на дескриптор SQLite3.
75
/// Обобщённый SELECT ip, comment из указанной таблицы.
76
/// @param[in] table Имя таблицы ("whitelist_ips" или "blocked_ips").
77
/// @return Вектор записей BlockEntry.
78
std::vector<BlockEntry>
GetEntries
(
const
std::string &table);
79
};
80
81
#endif
BlockerDB
Definition
db.h:41
BlockerDB::GetBlacklist
std::vector< BlockEntry > GetBlacklist()
Definition
db.cpp:198
BlockerDB::operator=
BlockerDB & operator=(const BlockerDB &)=delete
BlockerDB::Migrate
void Migrate()
Definition
db.cpp:89
BlockerDB::BlockerDB
BlockerDB(const std::string &path)
Definition
db.cpp:71
BlockerDB::db_
sqlite3 * db_
Definition
db.h:74
BlockerDB::UpdateLastBlockedAt
void UpdateLastBlockedAt(uint32_t ip)
Definition
db.cpp:146
BlockerDB::BlockerDB
BlockerDB(const BlockerDB &)=delete
BlockerDB::operator=
BlockerDB & operator=(BlockerDB &&)=delete
BlockerDB::GetWhitelist
std::vector< BlockEntry > GetWhitelist()
Definition
db.cpp:194
BlockerDB::BlockerDB
BlockerDB(BlockerDB &&)=delete
BlockerDB::GetEntries
std::vector< BlockEntry > GetEntries(const std::string &table)
Definition
db.cpp:202
BlockerDB::~BlockerDB
~BlockerDB()
Definition
db.cpp:80
IPToString
std::string IPToString(uint32_t ip)
Definition
db.cpp:45
ParseCIDR
CIDR ParseCIDR(const std::string &str)
Definition
db.cpp:18
BlockEntry
Одна запись (IP/CIDR + комментарий) для whitelist или blacklist.
Definition
db.h:15
BlockEntry::comment
std::string comment
Человекочитаемый комментарий.
Definition
db.h:17
BlockEntry::ip
std::string ip
IP-адрес или CIDR-нотация, например "10.0.0.0/8".
Definition
db.h:16
CIDR
Распарсенное представление CIDR-подсети.
Definition
db.h:21
CIDR::prefixlen
uint32_t prefixlen
Длина префикса (0-32). 32 означает одиночный хост.
Definition
db.h:23
CIDR::ip
uint32_t ip
IP-адрес в network byte order с применённой маской.
Definition
db.h:22
src
db.h
Generated by
1.12.0