Sous-routine pcap_loop
Objectif
Collecte et traite les paquets.
Bibliothèque
Bibliothèque pcap (libpcap.a)
Syntaxe
Descriptif
La sous-routine pcap_loop lit et traite les paquets. Cette sous-routine peut être appelée pour lire et traiter les paquets qui sont stockés dans un fichier de données de capture de paquets précédemment sauvegardé, appelé fichier de sauvegarde. La sous-routine peut également lire et traiter les paquets en cours de capture.
Cette sous-routine est similaire à la sous-routine pcap_dispatch , sauf qu'elle continue à lire les paquets jusqu'à ce que cnt paquets aient été traités, que la fin de fichier soit atteinte (dans le cas d'une lecture hors ligne) ou qu'une erreur se produise. Elle n'est pas renvoyée lorsque des délais d'attente de lecture en temps réel se produisent. C'est-à-dire que la spécification d'un délai d'attente de lecture différent de zéro pour la sous-routine pcap_open_live et l'appel de la sous-routine pcap_loop permettent la réception et le traitement des paquets qui arrivent lorsque le délai d'attente est dépassé.
Notez que le troisième paramètre, callback, est de type pcap_handler. Il s'agit d'un pointeur vers une sous-routine fournie par l'utilisateur avec trois paramètres. Définissez cette sous-routine fournie par l'utilisateur comme suit:
void user_routine(u_char *user, struct pcap_pkthdr *phrd, u_char *pdata)Le paramètre usersera le paramètre utilisateur qui a été transmis à la sous-routine pcap_dispatch . Le paramètre, phdr, est un pointeur vers la structure pcap_pkthdr , qui précède chaque paquet dans le fichier de sauvegarde . Le paramètre, pdata, pointe vers les données de paquet. Cela permet aux utilisateurs de définir leur propre traitement de leurs paquets filtrés.
Paramètres
| Article | Descriptif |
|---|---|
| callback | Pointe vers une routine fournie par l'utilisateur qui sera appelée pour chaque lecture de paquet. L'utilisateur est chargé de fournir un pointeur valide et des résultats imprévisibles peuvent se produire si un pointeur non valide est fourni. Remarque: La sous-routine pcap_dump peut également être spécifiée en tant que paramètre de rappel. Dans ce cas, appelez d'abord la sous-routine pcap_dump_open . Utilisez ensuite le pointeur sur la structure pcap_dumper_t renvoyée par la sous-routine pcap_dump_open en tant que paramètre utilisateur de la sous-routine pcap_dispatch . Le fragment de programme suivant illustre cette utilisation:
|
| Nbre | Indique le nombre maximal de paquets à traiter avant le renvoi. Une valeur négative provoque la boucle permanente de la sous-routine pcap_loop ou jusqu'à ce que la fin de fichier soit atteinte ou qu'une erreur se produise. Une valeur cnt de 0 traite tous les paquets jusqu'à ce qu'une erreur se produise ou que la fin de fichier soit atteinte. |
| p | Pointe vers un descripteur de capture de paquet renvoyé par la sous-routine pcap_open_offline ou pcap_open_live . Il sera utilisé pour stocker les données de paquet qui sont lues. |
| USER | Indique le premier argument à transmettre à la routine callback . |
Valeurs renvoyées
Une fois l'opération terminée, la sous-routine pcap_loop renvoie 0. La valeur 0 est également renvoyée si la fin de fichier a été atteinte dans un fichier sauvegarde. Si la sous-routine pcap_loop échoue, -1 est renvoyé. Dans ce cas, la sous-routine pcap_geterr ou la sous-routine pcap_perror peut être utilisée pour obtenir le texte de l'erreur.