Skip to content

Instantly share code, notes, and snippets.

@M0nteCarl0
Created July 24, 2023 11:04
Show Gist options
  • Save M0nteCarl0/8d443bd8a88ff994bf14444fb742ee5a to your computer and use it in GitHub Desktop.
Save M0nteCarl0/8d443bd8a88ff994bf14444fb742ee5a to your computer and use it in GitHub Desktop.
Example for extact HTTP header and body from raw packets via PcapPlusPlus
#include <iostream>
#include <stdlib.h>
#include <Packet.h>
#include <PcapLiveDeviceList.h>
#include <HttpLayer.h>
void packetHandler(pcpp::RawPacket* packet, pcpp::PcapLiveDevice* dev, void* cookie) {
// Получаем пакет HTTP
pcpp::Packet parsedPacket(packet);
pcpp::HttpRequestLayer* httpLayer = parsedPacket.getLayerOfType<pcpp::HttpRequestLayer>();
// Проверяем, что это HTTP пакет
if (httpLayer != nullptr) {
// Извлекаем заголовки HTTP
pcpp::HeaderField* httpHeader = httpLayer->getFieldByName(PCPP_HTTP_HEADER_HOST);
if (httpHeader != nullptr) {
std::cout << "Host: " << httpHeader->getFieldValue() << std::endl;
}
// Извлекаем тело запроса HTTP
pcpp::PayloadLayer* payloadLayer = parsedPacket.getLayerOfType<pcpp::PayloadLayer>();
if (payloadLayer != nullptr) {
std::cout << "Request body: " << payloadLayer->toString() << std::endl;
}
}
}
int main() {
// Получаем список доступных сетевых устройств
pcpp::PcapLiveDeviceList devList;
if (devList.size() == 0) {
std::cerr << "No network devices found" << std::endl;
return 1;
}
// Открываем первое доступное устройство для захвата трафика
pcpp::PcapLiveDevice* dev = devList.getPcapLiveDeviceByIndex(0);
if (!dev->open()) {
std::cerr << "Could not open device" << std::endl;
return 1;
}
// Устанавливаем фильтр для захвата только HTTP пакетов
if (!dev->setFilter("tcp port 80")) {
std::cerr << "Could not set filter" << std::endl;
return 1;
}
// Захватываем и анализируем каждый пакет
dev->startCapture(packetHandler);
// Ждем нажатия клавиши для остановки захвата пакетов
std::cin.ignore();
// Останавливаем захват пакетов
dev->stopCapture();
// Закрываем устройство
dev->close();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment