Примеры из кода - KJrTT/Indive_project GitHub Wiki

1. Инициализация логгера

// Логирование в SQLite
auto logger = std::make_unique<TrafficLogger>(
    TrafficLogger::LogType::SQLite, "packets_log.db"
);

// Логирование в CSV
auto logger = std::make_unique<TrafficLogger>(
    TrafficLogger::LogType::CSV, "packets_log.csv"
);

2. Асинхронное логирование пакета

logger->asyncLogPacket(
    timestamp.c_str(),
    sourceIP.c_str(),
    destIP.c_str(),
    sourceMAC.c_str(),
    destMAC.c_str(),
    protocol.c_str(),
    length,
    ping.c_str()
);

3. Обработка и отображение пакета в таблице

// Пример добавления строки в wxGrid
packetGrid->AppendRows(1);
int row = packetGrid->GetNumberRows() - 1;
packetGrid->SetCellValue(row, 0, wxString::FromUTF8(data.timestamp));
packetGrid->SetCellValue(row, 1, wxString::FromUTF8(data.sourceIP));
packetGrid->SetCellValue(row, 2, wxString::FromUTF8(data.destIP));
packetGrid->SetCellValue(row, 3, wxString::FromUTF8(data.sourceMAC));
packetGrid->SetCellValue(row, 4, wxString::FromUTF8(data.destMAC));
packetGrid->SetCellValue(row, 5, wxString::FromUTF8(data.protocolName));
packetGrid->SetCellValue(row, 6, wxString::Format("%d", data.length));
packetGrid->SetCellValue(row, 7, wxString::FromUTF8(data.ping));

4. Старт и стоп захвата трафика

// Старт
capture->startCapture([this](const PacketData& data) {
    this->ProcessPacketData(data);
});

// Стоп
capture->stopCapture();

5. Извлечение информации о протоколе и MAC-адресах

// Пример PcapPlusPlus
auto ethLayer = packet->getLayerOfType<pcpp::EthLayer>();
if (ethLayer) {
    std::string srcMac = ethLayer->getSourceMac().toString();
    std::string dstMac = ethLayer->getDestMac().toString();
}
auto ipLayer = packet->getLayerOfType<pcpp::IPv4Layer>();
if (ipLayer) {
    std::string srcIp = ipLayer->getSrcIPAddress().toString();
    std::string dstIp = ipLayer->getDstIPAddress().toString();
}

6. Пример фильтрации по протоколу

if (data.protocolName == "TCP") {
    // обработка TCP-пакета
}

7. Обработка ошибок

try {
} catch (const std::exception& ex) {
    wxLogError(wxString::FromUTF8(ex.what()));
}

8. Пример локализации строки

wxString label = wxString::FromUTF8("Старт захвата");
myButton->SetLabel(label);

9. Остановка асинхронного логгирования при выходе

if (logger) {
    logger->stopAsyncLogging();
}

10. CMakeLists.txt — добавление исходников

set(SOURCES
    src/main.cpp
    src/traffic_capture.cpp
    src/traffic_logger.cpp
    src/main_frame.cpp
)
add_executable(${PROJECT_NAME} WIN32 ${SOURCES})

11. Пример интеграции ONNX Runtime (ИИ-анализ)

#include <onnxruntime_cxx_api.h>

Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "NetMonitor");
Ort::SessionOptions session_options;
session_options.SetIntraOpNumThreads(1);

Ort::Session session(env, L"model.onnx", session_options);
//  подготовка входных данных и запуск инференса

12. Пример фильтрации по IP/MAC/протоколу

if (filterEnabled) {
    if (data.sourceIP != filterIP && data.destIP != filterIP)
        return; // не показываем пакет
    if (data.sourceMAC != filterMAC && data.destMAC != filterMAC)
        return;
    if (data.protocolName != filterProtocol)
        return;
}

Назад