Tutoriel C/C++

Tutoriel C/C++ library pacp

Poster par mbougrin Le 03 juillet 2022

library pacp

pcap (« packet capture ») est une interface de programmation permettant de capturer un trafic réseau. Elle est implémentée sous les systèmes GNU/Linux, FreeBSD, NetBSD, OpenBSD et Mac OS X par la bibliothèque libpcap. WinPcap est le portage sous Windows de libpcap.

Documentation pcap

Example pcap pour ouvrir un fichier pcap ou pcapng.


#include <string>
#include <iostream>
#include <pcap.h>

using namespace std;

int main(int argc, char **argv)
{
  if (argc != 2) {
    printf("usage: ./a.out pcapng_file\n");
    return 0;
  }
  char                errbuff[PCAP_ERRBUF_SIZE];
  pcap_t              *pcap;
  struct pcap_pkthdr  *header;
  const u_char        *data;
  u_int               packetCount;
  
  pcap = pcap_open_offline(argv[1], errbuff);
  packetCount = 0;
  while (pcap_next_ex(pcap, &header, &data) >= 0) {
    packetCount++;
    for (size_t i = 0; i < header->caplen ; ++i) {
      if ( (i % 16) == 0)
        printf("\n");
      printf("%.2x ", data[i]);
    }
  }
  printf("packet number:%d\n", packetCount);
  return 0;
}
          

On ouvre le fichier pcap avec la fonction pcap_open_offline


pcap = pcap_open_offline(argv[1], errbuff);
          
man pcap_open_offline

Ensuite avec la boucle while et la fonction pcap_next_ex on recupere packet par packet.

Il nous renvoie les informations du packet dans le header et le packet en question dans la data.


  while (pcap_next_ex(pcap, &header, &data) >= 0) {
    for (size_t i = 0; i < header->caplen ; ++i) {
      if ( (i % 16) == 0)
        printf("\n");
      printf("%.2x ", data[i]);
    }
  }
          
man pcap_next_ex

Ensuite plus qu'à lire les donner et à les exploiter.