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 pcapExample 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.