PDA

View Full Version : [C++] Qt e libpcap - pcap_next()


Teo@Unix
02-01-2010, 23:05
Stò implementando una classe con le librerie libpcap

ho un problema con la funzione pcap_next(), questa mi ritorna senza errore, ma il pacchetto ritornato è vuoto....:(,o meglio punta a "/0"

void Cpcap::gotPackets()
{
struct pcap_pkthdr* h;
while(1)
{
sem.acquire(1);
if(stop_FLAG) return;
memset(h,0,sizeof(pcap_pkthdr));
if((packet = pcap_next(handle,h)) == NULL)
{
this->next_Failed(tr("Errore su pcap_next()"),tr("Si è verificato un errore durante la cattura di un pacchetto"));
return;
}
this->IHavePacketForYou(packet); // Pacchetto
}
}

l'elemento packet è dichiarato const u_char* packet, ho controllato e non deve essere allocata memoria per questo, perchè ci dovrebbe pensare già la funzione interna di libreria.... (l'esempio ufficiale che lo conferma è questo (http://www.winpcap.org/docs/docs_411/html/group__wpcap__tut4.html))

ho provato anche in quest'altro modo, ma sempre lo stesso problema

void Cpcap::gotPackets()
{
struct pcap_pkthdr* h;
while(1)
{
sem.acquire(1);
if(stop_FLAG) return;
if(pcap_next_ex(handle,&h,&packet)==-1)
{
this->next_Failed(tr("Errore su pcap_next()"),tr("Si è verificato un errore durante la cattura di un pacchetto"));
return;
}
this->IHavePacketForYou(packet); // Pacchetto
}
}

Cosa ne dite?
Il programma continua e vengono aggiunti elementi ad un QListWigdet per ogni pacchetto, però bianchi.... :confused:

Teo@Unix
04-01-2010, 08:12
:cry: ... ragazzi nessuno ha mai usato libpcap in C++ ??

Teo@Unix
04-01-2010, 14:32
Il programma continua e vengono aggiunti elementi ad un QListWigdet per ogni pacchetto, però bianchi.... :confused:

Un'altro dettaglio:
l'altro elemento ritornato da pcap_next() è la "struct pcap_pkthdr", questa viene riempita correttamente. Perciò non è che la cattura non avviene...
però il pacchetto è vuoto. :help: