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:
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: