la façon correcte d'utiliser pcap_next_ex ou pcap_next (libpcap)
J'ai vu ce type de code utilisé dans un projet:
while (1)
{
l_numPkts = pcap_next_ex( m_pcapHandle, &header, &pkt_data);
//do something
memcpy(dst,pkt_data,size);
}
après la pcap_next_ex retour,le paquet statut sera réglé TP_STATUS_KERNEL,ce qui signifie que le buf était de retour à noyau.
code:
/* next packet */
switch (handle->md.tp_version) {
case TPACKET_V1:
h.h1->tp_status = TP_STATUS_KERNEL;
..
dans certains grande vitesse,il va obtenir un problème de mémoire?
et quelle est la façon correcte d'utiliser pcap_next /pcap_next_ex?
OriginalL'auteur jon | 2010-10-15
Vous devez vous connecter pour publier un commentaire.
J'ai bloqué sur ce problème en python avec winpcapy (1.9.2009) et WinPcap 4.1.0.2001.
Je l'ai résolu simplement par la création de copie de données par paquets array (comme suggéré par memcpy mentionné dans la question).
pkt_data = pkt_data[:header.contents.len]
Ne sais pas si c'est correct, mais travaille pour moi en ce moment.
Et basée sur la réponse à winpcap papermail ce que pkt_data références devrait persister jusqu'au prochain appel de pcap_next_ex (ou autre méthode dispatch). Si j'ai bien compris, car il utilise une mémoire tampon pour plus d'/tous les paquets et il peut donc être réutilisé pour d'autres/dernière paquets?
Q.
OriginalL'auteur queria
OriginalL'auteur sam