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;
}