PcapPlusPlus : une bibliothèque C++ pour manier les paquets réseau

Par:
fredericmazue

jeu, 19/01/2023 - 09:00

PcapPlusplus est une bibliothèque C++ multiplateforme pour la capture, l'analyse et la création de paquets réseau. PcapPlusPlus permet de capturer et d'envoyer des paquets réseau via des wrappers C++ pour les moteurs de traitement de paquets les plus populaires.

Voici la liste des moteurs de capture de paquets actuellement pris en charge :

  • capture en direct libpcap (sur Linux, MacOS, Android, FreeBSD)
  • Capture en direct WinPcap / Npcap (sous Windows)
  • DPDK Intel (sous Linux)
  • Vanilla PF_RING de ntop (sous Linux)
  • Capture à distance WinPcap (sous Windows)

PcapPlusPlus permet aussi de faire de l'analyse et de la création de paquets, y compris l'analyse détaillée des protocoles et des couches, la génération et l'édition de paquets pour une grande variété de protocoles réseau.

L'extrait de code ci-dessous montre comment lire un paquet à partir d'un fichier PCAP, l'analyser, identifier s'il s'agit d'un paquet IPv4 et imprimer les adresses IP source et destination :

#include <iostream>
#include "IPv4Layer.h"
#include "Packet.h"
#include "PcapFileDevice.h"

int main(int argc, char* argv[])
{
    // open a pcap file for reading
    pcpp::PcapFileReaderDevice reader("1_packet.pcap");
    if (!reader.open())
    {
        std::cerr << "Error opening the pcap file" << std::endl;
        return 1;
    }

    // read the first packet from the file (in this case the
    // file contains only one packet)
    pcpp::RawPacket rawPacket;
    if (!reader.getNextPacket(rawPacket))
    {
        std::cerr << "Couldn't read the first packet in the file" << std::endl;
        return 1;
    }

    // parse the raw packet into a parsed packet
    pcpp::Packet parsedPacket(&rawPacket);

    // check if it's an IPv4 packet
    if (parsedPacket.isPacketOfType(pcpp::IPv4))
    {
        // extract source and dest IPs
        pcpp::IPv4Address srcIP = parsedPacket.getLayerOfType()->getSrcIPv4Address();
        pcpp::IPv4Address destIP = parsedPacket.getLayerOfType()->getDstIPv4Address();

        // print source and dest IPs
        std::cout
            << "Source IP is '" << srcIP << "'; "
            << "Dest IP is '" << destIP << "'"
            << std::endl;
    }

    // close the file
    reader.close();

    return 0;
}

PcapPlusPlus contient en outre une implémentation unique de techniques de réassemblage de paquets, TCP Reassembly, qui prend en charge la retransmission TCP, les paquets TCP dans le désordre et les données TCP manquantes.

PcapPlusPlus est entièrement pris en charge sur Windows, MacOS, Linux, Android et FreeBSD. Des binaires prêts sont proposés pour chacune de ces plates-formes.

PcapPlusPlus est un logiciel libre sous licence Unlicense, disponible sur GitHub.

La bibliothèque PcapPlusPlus est entièrement documentée sur son site officiel. pcapplusplus.github.io