PDA

View Full Version : [C++] Packet capture - pcap_next()


Teo@Unix
18-12-2009, 10:10
Ciao,
stò rilevando molti problemi con la funzione pcap_next() che dovrebbe restituirmi un puntatore "const u_char*".
pcap_next() mi ritorna un pacchetto, ma la variabile const u_char* non mi varia, probabilemnte per colpa di "const"???
questo è il docie che controlla la funzione:
void TCPMon::GetNextPacket()
{
struct pcap_pkthdr* pcap_header = new(struct pcap_pkthdr);
if((packet = pcap_next(handle,pcap_header)) == NULL)
{
ErrorBuffer->clear();
ErrorBuffer->append("Cattura pacchetto non riuscita");
PrintErrorAndExit();
}
delete pcap_header;
}

packet è una variabile private della classe.
La routine if, non entra mai nel ciclo di errore, anche se packet è == '\0'.
Non posso no dichiarare "const" packet perchè mi da un errore di compilazione. Sapete darmi un consiglio?

Grazie.

Teo@Unix
18-12-2009, 14:40
Mi è venuta in mente un'altra cosa,
quando l'applicazione entra in loop, se uso pcap_loop(), l'interfaccia grafica non mi risponde più... questo perchè il processore è occupato nel mio ciclo, è corretto?

In linea di comando avevo già realizzato programmi similari ma non avevo certo questi problemi da gestire...
Possibile che sia questo il problema?

Nel caso come posso fare secondo voi?

Teo@Unix
18-12-2009, 22:45
Dopo ulteriori prove ho verificato che:
pcap_next_ex() mi ritorna correttamente, la struttura pcap_pkthdr viene riempita correttamente, nulla da fare per il pacchetto che mi torna vuoto.....:( non capisco.

altra cosa.... riguarda proprio l'interfaccia, come posso fare in modo che sia possibile interrompere il packet capture con i pulsanti, dunque i segnali emessi dai Widgets non riescono ad interrompere le altre attività....

ciò che mi manca credo sia il modo in cui occorre gestire le operazioni quando si utilizza l'interfaccia grafica......
qualcuno sa aiutarmi?