Skip to content

Instantly share code, notes, and snippets.

@M0nteCarl0
Created July 24, 2023 10:45
Show Gist options
  • Save M0nteCarl0/5869a5d54b4b29f8068bf8613aa7f88c to your computer and use it in GitHub Desktop.
Save M0nteCarl0/5869a5d54b4b29f8068bf8613aa7f88c to your computer and use it in GitHub Desktop.
Capture via PcapPlusPlus and extarct tcp flahs
#include <iostream>
#include <stdlib.h>
#include <Packet.h>
#include <PcapLiveDeviceList.h>
#include <TcpLayer.h>
void packetHandler(pcpp::RawPacket* packet, pcpp::PcapLiveDevice* dev, void* cookie) {
// Получаем пакет TCP
pcpp::Packet parsedPacket(packet);
pcpp::TcpLayer* tcpLayer = parsedPacket.getLayerOfType<pcpp::TcpLayer>();
// Проверяем, что это TCP пакет
if (tcpLayer != nullptr) {
// Извлекаем флаги TCP
if (tcpLayer->getTcpHeader()->synFlag == 1) {
std::cout << "SYN flag set" << std::endl;
}
if (tcpLayer->getTcpHeader()->ackFlag == 1) {
std::cout << "ACK flag set" << std::endl;
}
if (tcpLayer->getTcpHeader()->finFlag == 1) {
std::cout << "FIN flag set" << std::endl;
}
if (tcpLayer->getTcpHeader()->rstFlag == 1) {
std::cout << "RST flag set" << std::endl;
}
if (tcpLayer->getTcpHeader()->pshFlag == 1) {
std::cout << "PSH flag set" << std::endl;
}
if (tcpLayer->getTcpHeader()->urgFlag == 1) {
std::cout << "URG flag set" << std::endl;
}
if (tcpLayer->getTcpHeader()->eceFlag == 1) {
std::cout << "ECE flag set" << std::endl;
}
if (tcpLayer->getTcpHeader()->cwrFlag == 1) {
std::cout << "CWR flag set" << 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;
}
// Устанавливаем фильтр для захвата только TCP пакетов
if (!dev->setFilter("tcp")) {
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