Win Pcap / Sniffer / Pb de vitesse

cs_Kikx Messages postés 12 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 11 janvier 2005 - 11 janv. 2005 à 20:35
psyphi Messages postés 51 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 12 août 2010 - 3 juil. 2006 à 18:14
sniiiiffffffffff

j'ai fait un sniffer assez basique avec la librairie pcap ...
Jusqu'à la pas de soucis car je récupère effectivement les paquets de l'interface

Le problème est venu quand j'ai voulu un peu poussé mon sniffer dans ses limites et j'ai telechargé un iso (reseau local) donc mes débits avoisinent le 4Mo/s et la .... mon fichier de log faisait seulement 20 Mo

donc je me suis dit que ma boucle de sniffage était trop lente et j'ai supprimé tout le traitement à l'interieur et j'ai juste affiché la taille cumulé des paquets qui transitaient ... au final 30Mo

Donc a priori je drop pas mal de paquet ...

voila un extrait de mon code :


if ((fppcap_open(d->name,65536,PCAP_OPENFLAG_PROMISCUOUS, 1000 ,NULL,errbuf)) NULL){

// TODO : Faire un message d'erreur !
}
else {

//----------------------------------------
// Preparation du sniffage
//----------------------------------------
// On efface le fichier de log
pfile = fopen("C:/Log.txt", "w") ;

fwrite("",sizeof(
char),1,pfile) ;

fclose(pfile) ;
// on prepare la liste des paquets
LPaquet =
new Paquet() ;

// On efface la listView
ListView_DeleteAllItems(hWndTab1_List);

//----------------------------------------
// Début du sniffage
//----------------------------------------
while((res=pcap_next_ex(fp,&header,(
const u_char**) &pkt_data))>= 0){

if(res != 0) {
// le timeout n'est pas arrivé
size = header->caplen ;

total_size += size ;
//----------------------------------------
// On sauve le paquet dans un fichier
//----------------------------------------
pfile = fopen("C:/Log.txt", "a+b") ;

fwrite((char*) pkt_data,
sizeof(
char),size,pfile) ;

fclose(pfile) ;
//--------------------------------------
// On ecrit les Infos lié aux paquets a
// l'ecran
//--------------------------------------


// Ici il y a le code d'affichage

}
}

Si quelqu'un a une idée ...
avec ethereal ca marche parfaitement mais il va sans dire que je m'en sors pas avec la lecture du code ... je comprend rien !

Donc il doit y avoir une astuce que je n'ai pas saisi

merci de votre aide
Kikx

4 réponses

cs_Kikx Messages postés 12 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 11 janvier 2005
11 janv. 2005 à 21:38
Bon ben ...
snif personne m'aime :(
je vais suicider mon ordinateur ...
Voila de nouveaux test pour les interessés
Si je désactive tout ... j'ai l'impresssion de chopper tout les paquets ... mais bon j'ai aucun traitement dans la boucle alors c'est un peu lourd :(

Kikx
0
dark1933 Messages postés 9 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 11 novembre 2005
11 nov. 2005 à 22:44
Salut,


Juste pour vérifer, j'aimerai bien voir la définition de la structure de header
0
dark1933 Messages postés 9 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 11 novembre 2005
11 nov. 2005 à 22:45
caplen c'est la taille de quoi?
0
psyphi Messages postés 51 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 12 août 2010
3 juil. 2006 à 18:14
J'arrive un peu tard mais si tu drops tout ces paquets c'est parce que ta boucle de traitement est trop longue. Au lieu de tout faire en un seul jet, appele le traitement dans un autre thread en parallère.

There are only 10 types of people in the world: Those who understand binary, and those who don't.
0