PcapPlusPlus, la lib C++ incontournable pour les amateurs de paquets réseaux

Image illustrant l'article : PcapPlusPlus, la lib C++ incontournable pour les amateurs de paquets réseaux

PcapPlusPlus, la lib C++ incontournable pour les amateurs de paquets réseaux

par Korben -

Voilà une news qui va faire plaisir aux amateurs de programmation réseau et de traitement de paquets. PcapPlusPlus est une bibliothèque multi-plateforme en C++ dédiée à la capture, l’analyse et la création de paquets réseau.

Conçue pour être facile à utiliser et efficace, elle offre une variété de fonctionnalités qui devrait vous plaire si vous codez des outils liés au traitement de trames réseaux.

PcapPlusPlus permet de capturer et d’envoyer ces paquets réseau grâce à des wrappers C++ pour des outils populaire comme libpcap, WinPcap, NPcap, DPDK et PF_RING.

Mais cette lib offre d’autres fonctionnalités un peu plus avancées comme le décodage et le forgeage de paquets pour une grande variété de protocoles réseau tels que TCP, UDP, IPv4, IPv6, ARP, VLAN, MPLS, ICMP, HTTP, SSL/TLS, DNS, FTP et SMTP.

Voici un exemple d’implémentation pour décoder un paquet :

// 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 << std::endl << "Dest IP is: " << destIP << std::endl;

Capture et analyse de paquets réseaux avec PcapPlusPlus

Cela permet d’analyser et mais surtout de manipuler tous types de paquets réseau utilisant ces protocoles. Par exemple, comme mentionné sur cette pages, avec cette lib, vous pouvez coder des outils pour faire des trucs très cool comme :

  • ArpSpoofing: une application qui utilise les fonctionnalités de Packet++ et Pcap++ pour effectuer du spoofing ARP.
  • Arping: une implémentation de l’utilitaire arping en utilisant PcapPlusPlus.
  • DnsSpoofing: un utilitaire en ligne de commande qui effectue du spoofing DNS en utilisant Packet++ et Pcap++.
  • DNSResolver: un utilitaire en ligne de commande qui résout les adresses IPv4 pour un nom d’hôte en utilisant les protocoles ARP et DNS.
  • IcmpFileTransfer: une application qui montre comment transférer des fichiers entre deux machines en utilisant uniquement des messages ICMP.
  • HttpAnalyzer: une application qui analyse le trafic HTTP et fournit des informations détaillées sur le trafic, comme le nombre et le taux de paquets, la bande passante, le nombre et le taux de flux, les requêtes et les réponses HTTP, l’histogramme des noms d’hôte, l’histogramme des types de contenu, l’histogramme des codes d’état et bien plus encore. Peut fonctionner sur du trafic en direct ou lire des paquets depuis un fichier pcap.
  • SSLAnalyzer: une application qui analyse le trafic SSL/TLS et fournit des informations détaillées sur le trafic, comme le nombre et le taux de paquets, la bande passante, le nombre et le taux de flux, le nombre de messages SSL/TLS, l’histogramme des noms d’hôte, le nombre de versions SSL/TLS, le nombre de suites de chiffrement et bien plus encore. Peut fonctionner sur du trafic en direct ou lire des paquets depuis un fichier pcap.

Comme cette lib C++ est conçue pour être extrêmement rapide et légère, cela lui permet de traiter tous ces paquets très rapidement avec très peu de charge sur le système. Vous pourrez bien évidement l’utiliser sur votre OS, que ce soit du Windows, du MacOS, du Linux, de l’Android ou encore FreeBSD (les sources sont disponibles).

Voici un exemple d’implémentation pour lire des paquets :

// create a pcap file reader pcpp::PcapFileReaderDevice pcapReader("input.pcap"); pcapReader.open(); // create a pcapng file writer pcpp::PcapNgFileWriterDevice pcapNgWriter("output.pcapng"); pcapNgWriter.open(); // raw packet object pcpp::RawPacket rawPacket; // read packets from pcap reader and write pcapng writer while (pcapReader->getNextPacket(rawPacket)) { pcapNgWriter.writePacket(rawPacket); }

Une interface graphique facile à utiliser permet également de lire et d’écrire ces fameuses trames réseau dans des fichiers, prenant ainsi en charge les formats de fichier PCAP et PCAPNG. De plus, il contient une implémentation unique de techniques de réassemblage de paquets, notamment le réassemblage TCP qui prend en charge la retransmission TCP, les paquets TCP hors ordre et les données TCP manquantes, ainsi que la fragmentation et le défragmentation IP pour créer et réassembler des fragments IPv4 et IPv6.

Avec PcapPlusPlus vous pourrez également filtrer les paquets ou générer des empreintes numériques TLS pour cibler et identifier les paquets réseau de manière beaucoup plus précise.

Bref, tout ça pour dire que si votre cafetière est connectée sur le réseau, PcapPlusPlus peut même faire le café !

Allez, pour installer ce truc, toute la doc est là ! Amusez vous bien !