2011-05-24 1 views
4

J'utilise libpcap en C++ pour la lecture de paquets de fichiers PPCE, .: par exempleComment puis-je analyser un paquet ethernet en utilisant libpcap?

rc = pcap_next_ex((pcap_t*)handle, &header, (const unsigned char**)packet); 

Je voudrais analyser l'en-tête de paquets (sans la charge utile).

Par exemple, comment puis-je analyser un paquet donné afin d'extraire ses adresses IP source et de destintation?

grâce

+0

Si vous souhaitez utiliser C++, pourquoi ne pas utiliser une bibliothèque qui enveloppe libpcap et fournit des analyseurs de protocole intégrés? Je peux recommander [PcapPlusPlus] (https://github.com/seladb/PcapPlusPlus) que j'utilise, s'il vous plaît voir [ce tutoriel] (http://seladb.github.io/PcapPlusPlus-Doc/tutorial_packet_parsing.html) apprendre à analyser les paquets en utilisant cette bibliothèque. – John

Répondre

2

Les champs de données d'en-têtes IP sont emballés pour grand-boutiste et la charge utile de paquet est fixé juste après la fin de l'entête IP. voir un exemple here

5

Commander l'exemple de code pour libpcap http://www.tcpdump.org/pcap.html

Dans la fonction got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet); vous avez un pointeur *packet qui pointe vers le début du paquet. Pour l'analyse des en-têtes Ethernet que vous avez juste besoin d'utiliser le pointeur correspondant

ethernet = (struct sniff_ethernet*)(packet); 

Pour la couche IP

ip = (struct sniff_ip*)(packet + SIZE_ETHERNET); 

Si vous voulez analyser d'autres protocoles, il vous suffit de définir vos propres structures. Si vous voulez (ou ne voulez pas) analyser la charge utile, vous pouvez (ou non) définir un pointeur vers le début de la charge utile.

+0

Pcap a des filtres qui utilisent des données dans un paquet à des fins de filtrage. Ainsi, j'ai conclu qu'il sait ce que les données sont où, rend-il cela disponible? (par exemple, en tant que fichier d'en-tête) –

Questions connexes