#include #include #include #include #include #include #include #include #include "nids.h" static GtkWidget *pToolbar = NULL; static GtkWidget *text_view; struct _MainWindow { GtkWidget *pWindow; GtkWidget *pVBox; GtkWidget *pMenuBar; GtkWidget *pMenu; GtkWidget *pMenuItem; GtkWidget *pTextView; GtkTextBuffer *buffer; GtkWidget *pScrolled_window; GtkWidget *scrollbar; GtkWidget *box; GtkWidget *label; }; typedef struct _MainWindow MainWindow; struct _OptionWindow { GtkWidget *pWindow; GtkWidget *pVBox; GtkWidget *pFrame; GtkWidget *pVBoxFrame; GtkWidget *pLabel; GtkWidget *pEntryInterface; GtkWidget *pEntryFiltre; GtkWidget *savepackets; GtkWidget *promiscmode; GtkWidget *pSeparator; GtkWidget *pBouton; GtkWidget *pAnnuler; }; typedef struct _OptionWindow OptionWindow; struct _SuppWindow { GtkWidget *pWindow; GtkWidget *pVBox; GtkWidget *pFrame; GtkWidget *pVBoxFrame; GtkWidget *pLabel; GtkWidget *pEntryMotif; GtkWidget *pSeparator; GtkWidget *pBouton; GtkWidget *pAnnuler; }; typedef struct _SuppWindow SuppWindow; struct _NotifWindow { GtkWidget *pWindow; GtkWidget *pVBox; GtkWidget *pFrame; GtkWidget *pVBoxFrame; GtkWidget *pLabel; GtkWidget *pEntryTel; GtkWidget *pEntryDest; GtkWidget *sendsms; GtkWidget *sendconsole; GtkWidget *log; GtkWidget *pSeparator; GtkWidget *pBouton; GtkWidget *pAnnuler; }; typedef struct _NotifWindow NotifWindow; struct _MotifWindow { GtkWidget *pWindow; GtkWidget *pVBox; GtkWidget *pFrame; GtkWidget *pVBoxFrame; GtkWidget *pLabel; GtkWidget *pEntryMotif; GtkWidget *pEntryDesc; GtkWidget *pSeparator; GtkWidget *pBouton; GtkWidget *pAnnuler; GtkWidget *pcombo; }; typedef struct _MotifWindow MotifWindow; struct _ConsultWindow { GtkWidget *pSeparator; GtkWidget *pLabel; GtkWidget *pWindow; GtkWidget *pVBox; GtkWidget *pVBoxFrame; GtkWidget *pScrolled_window; GtkWidget *pFrame; GtkWidget *gtklist; GtkWidget *pBouton; GtkWidget *pList_item; GList *dlist; gchar buffer[64]; }; typedef struct _ConsultWindow ConsultWindow; const gchar *list_item_data_key="list_item_data"; void saisie(GtkButton *button); void ouvrir_fichier(GtkWidget *bouton, GtkWidget *file_selection); void nids_main(); void OnDestroy(GtkWidget *pWidget, gpointer pData) { /* Arret de la boucle evenementielle */ gtk_main_quit(); } void OnQuitter(GtkWidget* widget, gpointer data) { GtkWidget *pQuestion; pQuestion = gtk_message_dialog_new(GTK_WINDOW(data), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Voulez vous vraiment\n" "quitter le programme?"); switch(gtk_dialog_run(GTK_DIALOG(pQuestion))) { case GTK_RESPONSE_YES: gtk_main_quit(); break; case GTK_RESPONSE_NONE: case GTK_RESPONSE_NO: gtk_widget_destroy(pQuestion); break; } } void OnAbout(GtkWidget* widget, gpointer data) { printf("OnAbout\n"); } void OnDemarrer(GtkWidget* widget, gpointer data) { MainWindow *pApp; pApp = (MainWindow*) data; nids_main(); } void OnArreter(GtkWidget* widget, gpointer data) { MainWindow *pApp; pApp = (MainWindow*) data; printf("OnArreter\n"); } void OnValider(GtkWidget* widget, gpointer data) { OptionWindow *pApp; const gchar *interface,*filtre; int dump=0; int promisc=0; /* Recuperation de data */ pApp = (OptionWindow*) data; /* Recuperation du texte contenu dans le GtkEntry */ interface = gtk_entry_get_text(GTK_ENTRY(pApp->pEntryInterface)); filtre = gtk_entry_get_text(GTK_ENTRY(pApp->pEntryFiltre)); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pApp->savepackets))) { dump=1; } if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pApp->promiscmode))) { promisc=1; } /* CONNEXION A LA BASE DE DONNÉES */ MYSQL mysql; mysql_init(&mysql); mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option"); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char requete1[200] = ""; char requete2[200] = ""; char requete3[200] = ""; char requete4[200] = ""; sprintf(requete1, "UPDATE CaptureOptions SET device='%s' WHERE id='1';",interface); sprintf(requete2, "UPDATE CaptureOptions SET filter='%s' WHERE id='1';",filtre); sprintf(requete3, "UPDATE CaptureOptions SET dump='%d' WHERE id='1';",dump); sprintf(requete4, "UPDATE CaptureOptions SET promisc='%d' WHERE id='1';",promisc); if (mysql_query(&mysql, requete1)) { printf("Erreur mis à jours des options de capture !\n"); } else { printf("Options de capture mis à jours..\n"); } mysql_query(&mysql, requete2); mysql_query(&mysql, requete3); mysql_query(&mysql, requete4); } //printf("\nInterface: %s\nFiltre: %s\nEnregistrer les paquets: %d\nActiver le mode espion: %d\n",interface,filtre,dump,promisc); } void OnValiderNotifOptions(GtkWidget* widget, gpointer data) { NotifWindow *pApp; const gchar *tel,*dest; int sendsms=0; int sendconsole=0; int log=0; /* Recuperation de data */ pApp = (NotifWindow*) data; /* Recuperation du texte contenu dans le GtkEntry */ tel = gtk_entry_get_text(GTK_ENTRY(pApp->pEntryTel)); dest = gtk_entry_get_text(GTK_ENTRY(pApp->pEntryDest)); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pApp->sendsms))) { sendsms=1; } if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pApp->sendconsole))) { sendconsole=1; } if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pApp->log))) { log=1; } /* CONNEXION A LA BASE DE DONNÉES */ MYSQL mysql; mysql_init(&mysql); mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option"); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char requete1[200] = ""; char requete2[200] = ""; char requete3[200] = ""; char requete4[200] = ""; char requete5[200] = ""; sprintf(requete1, "UPDATE NotifOptions SET sendsms='%d' WHERE id='1';",sendsms); sprintf(requete2, "UPDATE NotifOptions SET tel='%s' WHERE id='1';",tel); sprintf(requete3, "UPDATE NotifOptions SET sendconsole='%d' WHERE id='1';",sendconsole); sprintf(requete4, "UPDATE NotifOptions SET ipdest='%s' WHERE id='1';",dest); sprintf(requete5, "UPDATE NotifOptions SET log='%d' WHERE id='1';",log); if (mysql_query(&mysql, requete1)) { printf("Erreur mis à jours des options de notification !\n"); } else { printf("Options de notification mis à jours..\n"); } mysql_query(&mysql, requete2); mysql_query(&mysql, requete3); mysql_query(&mysql, requete4); mysql_query(&mysql, requete5); } //printf("\nGSM: %s\nIP: %s\nEnvoyer un SMS: %d\nEnvoyer vers console: %d\nJournaliser les paquets: %d\n",tel,dest,sendsms,sendconsole,log); } void OnValiderSignature(GtkWidget* pEntryMotif, gpointer data) { const gchar *motif,*desc,*categ; MotifWindow *pApp; /* Recuperation de data */ pApp = (MotifWindow*) data; /* Recuperation du texte contenu dans le GtkEntry */ motif = gtk_entry_get_text(GTK_ENTRY(pApp->pEntryMotif)); desc = gtk_entry_get_text(GTK_ENTRY(pApp->pEntryDesc)); categ = gtk_combo_box_get_active_text (GTK_COMBO_BOX (pApp->pcombo)); /* CONNEXION A LA BDD */ MYSQL mysql; mysql_init(&mysql); mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option"); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; sprintf(req1, "INSERT INTO %s VALUES('','%s','%s');",categ,motif,desc); mysql_query(&mysql,req1); } printf("\nMotif: %s\nDescription: %s\nCategorie: %s\n",motif,desc,categ); } void OnValiderSupprimer(GtkWidget* pEntryMotif, gpointer data) { const gchar *motif,*desc,*categ; SuppWindow *pApp; /* Recuperation de data */ pApp = (SuppWindow*) data; /* Recuperation du texte contenu dans le GtkEntry */ motif = gtk_entry_get_text(GTK_ENTRY(pApp->pEntryMotif)); /* CONNEXION A LA BDD */ MYSQL mysql; mysql_init(&mysql); mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option"); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; char req2[200] = ""; char req3[200] = ""; char req4[200] = ""; sprintf(req1, "DELETE FROM iprules where motif='%s';",motif); sprintf(req2, "DELETE FROM tcprules where motif='%s';",motif); sprintf(req3, "DELETE FROM icmprules where motif='%s';",motif); sprintf(req4, "DELETE FROM udprules where motif='%s';",motif); mysql_query(&mysql,req1); mysql_query(&mysql,req2); mysql_query(&mysql,req3); mysql_query(&mysql,req4); } printf("\nMotif supprimer: %s\n",motif); } void OnAjouter(GtkWidget* widget, gpointer data) { MotifWindow *pApp; /* Recuperation de data */ pApp = (MotifWindow*) data; /* Creation de la fenetre */ pApp->pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Definition de la position */ gtk_window_set_position(GTK_WINDOW(pApp->pWindow), GTK_WIN_POS_CENTER); /* Definition de la taille de la fenetre */ gtk_window_set_default_size(GTK_WINDOW(pApp->pWindow), 520, 300); /* Titre de la fenetre */ gtk_window_set_title(GTK_WINDOW(pApp->pWindow), "Signature"); /* On ajoute un espace de 5 sur les bords de la fenetre */ gtk_container_set_border_width(GTK_CONTAINER(pApp->pWindow), 50); pApp->pVBox = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(pApp->pWindow), pApp->pVBox); /* Creation du premier GtkFrame */ pApp->pFrame = gtk_frame_new("Ajouter une signature"); gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pFrame, TRUE, FALSE, 0); /* Creation et insertion d une boite pour le premier GtkFrame */ pApp->pVBoxFrame = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(pApp->pFrame), pApp->pVBoxFrame); /* Creation et insertion des elements contenus dans le premier GtkFrame */ pApp->pLabel = gtk_label_new("Motif :"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pLabel, TRUE, FALSE, 0); pApp->pEntryMotif = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pEntryMotif, TRUE, FALSE, 0); g_signal_connect(G_OBJECT(pApp->pEntryMotif), "activate", G_CALLBACK(OnValiderSignature),(gpointer) pApp); pApp->pLabel = gtk_label_new("Description :"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pLabel, TRUE, FALSE, 0); pApp->pEntryDesc = gtk_entry_new(); g_signal_connect(G_OBJECT(pApp->pEntryDesc), "activate", G_CALLBACK(OnValiderSignature),(gpointer) pApp); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pEntryDesc, TRUE, FALSE, 0); pApp->pLabel = gtk_label_new("Categorie :"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pLabel, TRUE, FALSE, 0); /* Creation d'un GtkComboBox predefinit et ajout dans le conteneur */ pApp->pcombo = gtk_combo_box_new_text (); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pcombo, TRUE, FALSE, 0); /* Insertion de donnees dans la liste du widget */ gtk_combo_box_append_text (GTK_COMBO_BOX (pApp->pcombo), "iprules"); gtk_combo_box_append_text (GTK_COMBO_BOX (pApp->pcombo), "tcprules"); gtk_combo_box_append_text (GTK_COMBO_BOX (pApp->pcombo), "icmprules"); gtk_combo_box_prepend_text (GTK_COMBO_BOX (pApp->pcombo), "idprules"); /* On affiche un element par defaut. L'index commence à zero */ gtk_combo_box_set_active (GTK_COMBO_BOX (pApp->pcombo), 1); /* Creation d un GtkHSeparator */ pApp->pSeparator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pSeparator, TRUE, FALSE, 0); /* Creation du bouton */ pApp->pBouton = gtk_button_new_with_label("Ajouter"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pBouton, TRUE, FALSE,0); g_signal_connect(G_OBJECT(pApp->pBouton), "clicked", G_CALLBACK(OnValiderSignature), (gpointer*) pApp); pApp->pAnnuler = gtk_button_new_with_label("Annuler"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pAnnuler, TRUE, FALSE,0); gtk_signal_connect_object (GTK_OBJECT (pApp->pAnnuler), "clicked",GTK_SIGNAL_FUNC (gtk_widget_destroy),GTK_OBJECT (pApp->pWindow)); /* Connexion du signal "destroy" */ g_signal_connect(G_OBJECT(pApp->pWindow), "destroy", G_CALLBACK(OnDestroy), NULL); /* Affichage de la fenetre */ gtk_widget_show_all(pApp->pWindow); /* Demarrage de la boucle evenementielle */ gtk_main(); } void OnSupprimer(GtkWidget* widget, gpointer data) { SuppWindow *pApp; /* Recuperation de data */ pApp = (SuppWindow*) data; /* Creation de la fenetre */ pApp->pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Definition de la position */ gtk_window_set_position(GTK_WINDOW(pApp->pWindow), GTK_WIN_POS_CENTER); /* Definition de la taille de la fenetre */ gtk_window_set_default_size(GTK_WINDOW(pApp->pWindow), 520, 300); /* Titre de la fenetre */ gtk_window_set_title(GTK_WINDOW(pApp->pWindow), "Signature"); /* On ajoute un espace de 5 sur les bords de la fenetre */ gtk_container_set_border_width(GTK_CONTAINER(pApp->pWindow), 50); pApp->pVBox = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(pApp->pWindow), pApp->pVBox); /* Creation du premier GtkFrame */ pApp->pFrame = gtk_frame_new("Supprimer une signature"); gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pFrame, TRUE, FALSE, 0); /* Creation et insertion d une boite pour le premier GtkFrame */ pApp->pVBoxFrame = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(pApp->pFrame), pApp->pVBoxFrame); /* Creation et insertion des elements contenus dans le premier GtkFrame */ pApp->pLabel = gtk_label_new("Motif a supprimer:"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pLabel, TRUE, FALSE, 0); pApp->pEntryMotif = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pEntryMotif, TRUE, FALSE, 0); g_signal_connect(G_OBJECT(pApp->pEntryMotif), "activate", G_CALLBACK(OnValiderSupprimer),(gpointer) pApp); /* Creation d un GtkHSeparator */ pApp->pSeparator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pSeparator, TRUE, FALSE, 0); /* Creation du bouton */ pApp->pBouton = gtk_button_new_with_label("Supprimer"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pBouton, TRUE, FALSE,0); g_signal_connect(G_OBJECT(pApp->pBouton), "clicked", G_CALLBACK(OnValiderSupprimer), (gpointer*) pApp); pApp->pAnnuler = gtk_button_new_with_label("Annuler"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pAnnuler, TRUE, FALSE,0); gtk_signal_connect_object (GTK_OBJECT (pApp->pAnnuler), "clicked",GTK_SIGNAL_FUNC (gtk_widget_destroy),GTK_OBJECT (pApp->pWindow)); /* Connexion du signal "destroy" */ g_signal_connect(G_OBJECT(pApp->pWindow), "destroy", G_CALLBACK(OnDestroy), NULL); /* Affichage de la fenetre */ gtk_widget_show_all(pApp->pWindow); /* Demarrage de la boucle evenementielle */ gtk_main(); } void OnNotifOptions(GtkWidget* widget, gpointer data) { NotifWindow *pApp; /* Recuperation de data */ pApp = (NotifWindow*) data; /* Creation de la fenetre */ pApp->pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Definition de la position */ gtk_window_set_position(GTK_WINDOW(pApp->pWindow), GTK_WIN_POS_CENTER); /* Definition de la taille de la fenetre */ gtk_window_set_default_size(GTK_WINDOW(pApp->pWindow), 520, 300); /* Titre de la fenetre */ gtk_window_set_title(GTK_WINDOW(pApp->pWindow), "Notification"); /* On ajoute un espace de 5 sur les bords de la fenetre */ gtk_container_set_border_width(GTK_CONTAINER(pApp->pWindow), 50); pApp->pVBox = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(pApp->pWindow), pApp->pVBox); /* Creation du premier GtkFrame */ pApp->pFrame = gtk_frame_new("Options de notification"); gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pFrame, TRUE, FALSE, 0); /* Creation et insertion d une boite pour le premier GtkFrame */ pApp->pVBoxFrame = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(pApp->pFrame), pApp->pVBoxFrame); /* Envoyer un SMS */ pApp->sendsms = gtk_check_button_new_with_label("Envoyer un SMS"); g_signal_connect(G_OBJECT(pApp->sendsms), "activate", G_CALLBACK(OnValider),(gpointer) pApp); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->sendsms, TRUE, FALSE, 0); /* RECUPERER LE NOM DE L'INTERFACE DE CAPTURE */ MYSQL_RES *res_ptr; MYSQL_ROW mysqlrow; int res=-1; int v1,v2,v3; MYSQL mysql; mysql_init(&mysql); mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option"); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; sprintf(req1, "SELECT sendsms FROM NotifOptions WHERE id='1';"); res=mysql_query(&mysql,req1); res_ptr = mysql_store_result(&mysql); mysqlrow = mysql_fetch_row(res_ptr); sscanf(mysqlrow[0],"%d",&v1); } if (v1==1) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pApp->sendsms), TRUE); } /* Creation et insertion des elements contenus dans le premier GtkFrame */ pApp->pLabel = gtk_label_new("Numero de GSM :"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pLabel, TRUE, FALSE, 0); pApp->pEntryTel = gtk_entry_new(); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; sprintf(req1, "SELECT tel FROM NotifOptions WHERE id='1';"); res=mysql_query(&mysql,req1); res_ptr = mysql_store_result(&mysql); mysqlrow = mysql_fetch_row(res_ptr); } gtk_entry_set_text(GTK_ENTRY(pApp->pEntryTel), mysqlrow[0]); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pEntryTel, TRUE, FALSE, 0); g_signal_connect(G_OBJECT(pApp->pEntryTel), "activate", G_CALLBACK(OnValider),(gpointer) pApp); /* Notification par Console */ pApp->sendconsole = gtk_check_button_new_with_label("Notification par Console"); g_signal_connect(G_OBJECT(pApp->sendconsole), "activate", G_CALLBACK(OnValider),(gpointer) pApp); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->sendconsole, TRUE, FALSE, 0); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; sprintf(req1, "SELECT sendconsole FROM NotifOptions WHERE id='1';"); res=mysql_query(&mysql,req1); res_ptr = mysql_store_result(&mysql); mysqlrow = mysql_fetch_row(res_ptr); sscanf(mysqlrow[0],"%d",&v2); } if (v2==1) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pApp->sendconsole), TRUE); } pApp->pLabel = gtk_label_new("Adresse IP :"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pLabel, TRUE, FALSE, 0); pApp->pEntryDest = gtk_entry_new(); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; sprintf(req1, "SELECT ipdest FROM NotifOptions WHERE id='1';"); res=mysql_query(&mysql,req1); res_ptr = mysql_store_result(&mysql); mysqlrow = mysql_fetch_row(res_ptr); } gtk_entry_set_text(GTK_ENTRY(pApp->pEntryDest), mysqlrow[0]); g_signal_connect(G_OBJECT(pApp->pEntryDest), "activate", G_CALLBACK(OnValider),(gpointer) pApp); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pEntryDest, TRUE, FALSE, 0); /* Case a coher */ pApp->log = gtk_check_button_new_with_label("Journaliser les intrusions"); g_signal_connect(G_OBJECT(pApp->log), "activate", G_CALLBACK(OnValider),(gpointer) pApp); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->log, TRUE, FALSE, 0); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; sprintf(req1, "SELECT log FROM NotifOptions WHERE id='1';"); res=mysql_query(&mysql,req1); res_ptr = mysql_store_result(&mysql); mysqlrow = mysql_fetch_row(res_ptr); sscanf(mysqlrow[0],"%d",&v3); } if (v3==1) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pApp->log), TRUE); } /* Creation d un GtkHSeparator */ pApp->pSeparator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pSeparator, TRUE, FALSE, 0); /* Creation du bouton */ pApp->pBouton = gtk_button_new_with_label("Valider"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pBouton, TRUE, FALSE,0); g_signal_connect(G_OBJECT(pApp->pBouton), "clicked", G_CALLBACK(OnValiderNotifOptions), (gpointer*) pApp); pApp->pAnnuler = gtk_button_new_with_label("Annuler"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pAnnuler, TRUE, FALSE,0); gtk_signal_connect_object (GTK_OBJECT (pApp->pAnnuler), "clicked",GTK_SIGNAL_FUNC (gtk_widget_destroy),GTK_OBJECT (pApp->pWindow)); /* Connexion du signal "destroy" */ g_signal_connect(G_OBJECT(pApp->pWindow), "destroy", G_CALLBACK(OnDestroy), NULL); /* Affichage de la fenetre */ gtk_widget_show_all(pApp->pWindow); /* Demarrage de la boucle evenementielle */ gtk_main(); } void OnOptions(GtkWidget* widget, gpointer data) { OptionWindow *pApp; /* Recuperation de data */ pApp = (OptionWindow*) data; /* Creation de la fenetre */ pApp->pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Definition de la position */ gtk_window_set_position(GTK_WINDOW(pApp->pWindow), GTK_WIN_POS_CENTER); /* Definition de la taille de la fenetre */ gtk_window_set_default_size(GTK_WINDOW(pApp->pWindow), 520, 300); /* Titre de la fenetre */ gtk_window_set_title(GTK_WINDOW(pApp->pWindow), "Options"); /* On ajoute un espace de 5 sur les bords de la fenetre */ gtk_container_set_border_width(GTK_CONTAINER(pApp->pWindow), 50); pApp->pVBox = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(pApp->pWindow), pApp->pVBox); /* Creation du premier GtkFrame */ pApp->pFrame = gtk_frame_new("Options de capture"); gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pFrame, TRUE, FALSE, 0); /* Creation et insertion d une boite pour le premier GtkFrame */ pApp->pVBoxFrame = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(pApp->pFrame), pApp->pVBoxFrame); /* Creation et insertion des elements contenus dans le premier GtkFrame */ pApp->pLabel = gtk_label_new("Interface de capture :"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pLabel, TRUE, FALSE, 0); pApp->pEntryInterface = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pEntryInterface, TRUE, FALSE, 0); /* RECUPERER LE NOM DE L'INTERFACE DE CAPTURE */ MYSQL_RES *res_ptr; MYSQL_ROW mysqlrow; int res=-1; int val1,val2; MYSQL mysql; mysql_init(&mysql); mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option"); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; sprintf(req1, "SELECT device FROM CaptureOptions WHERE id='1';"); res=mysql_query(&mysql,req1); res_ptr = mysql_store_result(&mysql); mysqlrow = mysql_fetch_row(res_ptr); } gtk_entry_set_text(GTK_ENTRY(pApp->pEntryInterface), mysqlrow[0]); g_signal_connect(G_OBJECT(pApp->pEntryInterface), "activate", G_CALLBACK(OnValider),(gpointer) pApp); pApp->pLabel = gtk_label_new("Expression filtre :"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pLabel, TRUE, FALSE, 0); pApp->pEntryFiltre = gtk_entry_new(); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; sprintf(req1, "SELECT filter FROM CaptureOptions WHERE id='1';"); res=mysql_query(&mysql,req1); res_ptr = mysql_store_result(&mysql); mysqlrow = mysql_fetch_row(res_ptr); } gtk_entry_set_text(GTK_ENTRY(pApp->pEntryFiltre), mysqlrow[0]); g_signal_connect(G_OBJECT(pApp->pEntryFiltre), "activate", G_CALLBACK(OnValider),(gpointer) pApp); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pEntryFiltre, TRUE, FALSE, 0); /* Case a coher */ pApp->savepackets = gtk_check_button_new_with_label("Enregistrer les paquets"); g_signal_connect(G_OBJECT(pApp->savepackets), "activate", G_CALLBACK(OnValider),(gpointer) pApp); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->savepackets, TRUE, FALSE, 0); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; sprintf(req1, "SELECT dump FROM CaptureOptions WHERE id='1';"); res=mysql_query(&mysql,req1); res_ptr = mysql_store_result(&mysql); mysqlrow = mysql_fetch_row(res_ptr); sscanf(mysqlrow[0],"%d",&val1); } if (val1==1) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pApp->savepackets), TRUE); } pApp->promiscmode = gtk_check_button_new_with_label("Activer le mode espion"); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; sprintf(req1, "SELECT promisc FROM CaptureOptions WHERE id='1';"); res=mysql_query(&mysql,req1); res_ptr = mysql_store_result(&mysql); mysqlrow = mysql_fetch_row(res_ptr); sscanf(mysqlrow[0],"%d",&val2); } if (val2==1) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pApp->promiscmode), TRUE); } g_signal_connect(G_OBJECT(pApp->promiscmode), "activate", G_CALLBACK(OnValider),(gpointer) pApp); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->promiscmode, TRUE, FALSE, 0); /* Creation d un GtkHSeparator */ pApp->pSeparator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pSeparator, TRUE, FALSE, 0); /* Creation du bouton */ pApp->pBouton = gtk_button_new_with_label("Valider"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pBouton, TRUE, FALSE,0); g_signal_connect(G_OBJECT(pApp->pBouton), "clicked", G_CALLBACK(OnValider), (gpointer*) pApp); pApp->pAnnuler = gtk_button_new_with_label("Annuler"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pAnnuler, TRUE, FALSE,0); gtk_signal_connect_object (GTK_OBJECT (pApp->pAnnuler), "clicked",GTK_SIGNAL_FUNC (gtk_widget_destroy),GTK_OBJECT (pApp->pWindow)); /* Connexion du signal "destroy" */ g_signal_connect(G_OBJECT(pApp->pWindow), "destroy", G_CALLBACK(OnDestroy), NULL); /* Affichage de la fenetre */ gtk_widget_show_all(pApp->pWindow); /* Demarrage de la boucle evenementielle */ gtk_main(); } void OnConsulter(GtkWidget* widget, gpointer data) { ConsultWindow *pApp; /* Recuperation de data */ pApp = (ConsultWindow*) data; /* Creation de la fenetre */ pApp->pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Definition de la position */ gtk_window_set_position(GTK_WINDOW(pApp->pWindow), GTK_WIN_POS_CENTER); /* Definition de la taille de la fenetre */ gtk_window_set_default_size(GTK_WINDOW(pApp->pWindow), 520, 300); /* Titre de la fenetre */ gtk_window_set_title(GTK_WINDOW(pApp->pWindow), "Signature"); /* On ajoute un espace de 5 sur les bords de la fenetre */ gtk_container_set_border_width(GTK_CONTAINER(pApp->pWindow), 50); pApp->pVBox = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(pApp->pWindow), pApp->pVBox); /* Creation du premier GtkFrame */ pApp->pFrame = gtk_frame_new("Liste des signatures"); gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pFrame, TRUE, FALSE, 0); /* Creation et insertion d une boite pour le premier GtkFrame */ pApp->pVBoxFrame = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(pApp->pFrame), pApp->pVBoxFrame); pApp->pScrolled_window=gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_usize(pApp->pScrolled_window, 300, 100); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pScrolled_window, TRUE, FALSE,0); gtk_widget_show(pApp->pScrolled_window); pApp->gtklist=gtk_list_new(); gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(pApp->pScrolled_window), pApp->gtklist); gtk_widget_show(pApp->gtklist); //gtk_signal_connect(GTK_OBJECT(pApp->gtklist), "selection_changed", GTK_SIGNAL_FUNC(sigh_print_selection), NULL); /* RECUPERER LES SIGNATURES */ MYSQL_RES *res_ptr; MYSQL_ROW mysqlrow; int res=-1; int i; MYSQL mysql; mysql_init(&mysql); mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option"); if(mysql_real_connect(&mysql,"localhost","root","root","nidsdb",0,NULL,0)) { char req1[200] = ""; sprintf(req1, "SELECT motif FROM tcprules UNION SELECT motif FROM iprules UNION SELECT motif FROM udprules UNION SELECT motif FROM icmprules;"); res=mysql_query(&mysql,req1); res_ptr = mysql_use_result(&mysql); while ((mysqlrow = mysql_fetch_row(res_ptr))) { sprintf(pApp->buffer, mysqlrow[0], i); pApp->pLabel=gtk_label_new(pApp->buffer); pApp->pList_item=gtk_list_item_new(); gtk_container_add(GTK_CONTAINER(pApp->pList_item), pApp->pLabel); gtk_widget_show(pApp->pLabel); gtk_container_add(GTK_CONTAINER(pApp->gtklist), pApp->pList_item); gtk_widget_show(pApp->pList_item); } } pApp->pBouton = gtk_button_new_with_label("Fermer"); gtk_box_pack_start(GTK_BOX(pApp->pVBoxFrame), pApp->pBouton, TRUE, FALSE,0); gtk_signal_connect_object (GTK_OBJECT (pApp->pBouton), "clicked",GTK_SIGNAL_FUNC (gtk_widget_destroy),GTK_OBJECT (pApp->pWindow)); /* Connexion du signal "destroy" */ g_signal_connect(G_OBJECT(pApp->pWindow), "destroy", G_CALLBACK(OnDestroy), NULL); /* Affichage de la fenetre */ gtk_widget_show_all(pApp->pWindow); /* Demarrage de la boucle evenementielle */ gtk_main(); } void saisie(GtkButton *button) { GtkWidget *selection; selection = gtk_file_selection_new( g_locale_to_utf8( "Sélectionnez un fichier", -1, NULL, NULL, NULL) ); gtk_widget_show(selection); g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(selection)->ok_button), "clicked", G_CALLBACK(ouvrir_fichier), selection ); g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(selection)->cancel_button), "clicked", G_CALLBACK(gtk_widget_destroy), selection); } void ouvrir_fichier(GtkWidget *bouton, GtkWidget *file_selection) { GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; FILE *fichier; const gchar *chemin; gchar lecture[1024]; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); chemin = gtk_file_selection_get_filename(GTK_FILE_SELECTION (file_selection)); fichier = fopen(chemin,"rt"); if(fichier == NULL) { GtkWidget *dialog; dialog = gtk_message_dialog_new(GTK_WINDOW(file_selection), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Impossible d'ouvrir le fichier : \n%s", g_locale_to_utf8(chemin, -1, NULL, NULL, NULL)); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); gtk_widget_destroy(file_selection); return; } gtk_widget_destroy(file_selection); gtk_text_buffer_get_start_iter(buffer,&start); gtk_text_buffer_get_end_iter(buffer,&end); gtk_text_buffer_delete(buffer, &start, &end); while(fgets(lecture, 1024, fichier)) { gtk_text_buffer_get_end_iter(buffer,&end); gtk_text_buffer_insert(buffer, &end, g_locale_to_utf8(lecture, -1, NULL, NULL, NULL), -1); } fclose(fichier); } void OnImporter(GtkWidget* widget, gpointer data) { GtkWidget* window; GtkWidget* box; GtkWidget* button; GtkWidget *scrollbar; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 800, 580); gtk_window_set_title(GTK_WINDOW(window), "Fichier"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),0); box=gtk_vbox_new(FALSE,5); gtk_container_add(GTK_CONTAINER(window),box); scrollbar = gtk_scrolled_window_new(NULL, NULL); gtk_box_pack_start(GTK_BOX(box), scrollbar, TRUE, TRUE, 5); text_view=gtk_text_view_new(); gtk_container_add(GTK_CONTAINER(scrollbar),text_view); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollbar), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); button=gtk_button_new_with_label(g_locale_to_utf8( "Sélectionnez un fichier", -1, NULL, NULL, NULL)); gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0); g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(saisie),NULL); gtk_widget_show_all(window); gtk_main(); } /** * PROGRAMME PRINCIPALE */ int main(int argc, char *argv[]) { MainWindow *pApp; gtk_init(&argc, &argv); pApp = g_malloc(sizeof(MainWindow)); /* CREATION DE LA FENETRE PRINCIPALE */ pApp->pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(pApp->pWindow), "Systeme de detection d'intrusion"); gtk_window_set_position(GTK_WINDOW(pApp->pWindow), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(pApp->pWindow), 1000, 700); g_signal_connect(G_OBJECT(pApp->pWindow), "destroy", G_CALLBACK(gtk_main_quit),NULL); /* Creation de la GtkVBox */ pApp->pVBox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(pApp->pWindow), pApp->pVBox); /* CREATION DU MENU */ pApp->pMenuBar = gtk_menu_bar_new(); pApp->pMenu = gtk_menu_new(); pApp->pMenuItem = gtk_menu_item_new_with_label("Demarrer"); g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(OnDemarrer),(gpointer) pApp); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem); pApp->pMenuItem = gtk_menu_item_new_with_label("Arrêter"); g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(OnArreter),(gpointer) pApp); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem); pApp->pMenuItem = gtk_menu_item_new_with_label("Options"); g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(OnOptions),(gpointer) pApp); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem); pApp->pMenuItem = gtk_menu_item_new_with_label("Importer"); g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(OnImporter),(gpointer) pApp); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem); pApp->pMenuItem = gtk_menu_item_new_with_label("Quitter"); g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(gtk_main_quit),NULL); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem); /* CAPTURE */ pApp->pMenuItem = gtk_menu_item_new_with_label("Capture"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pApp->pMenuItem), pApp->pMenu); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenuBar), pApp->pMenuItem); pApp->pMenu = gtk_menu_new(); /* SIGNATURES */ pApp->pMenuItem = gtk_menu_item_new_with_label("Consulter"); g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(OnConsulter),(gpointer) pApp); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem); pApp->pMenuItem = gtk_menu_item_new_with_label("Ajouter"); g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(OnAjouter),(gpointer) pApp); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem); pApp->pMenuItem = gtk_menu_item_new_with_label("Supprimer"); g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(OnSupprimer),(gpointer) pApp); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem); pApp->pMenuItem = gtk_menu_item_new_with_label("Signatures"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pApp->pMenuItem), pApp->pMenu); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenuBar), pApp->pMenuItem); pApp->pMenu = gtk_menu_new(); /* NOTIFICATION */ pApp->pMenuItem = gtk_menu_item_new_with_label("Options"); g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(OnNotifOptions),(gpointer) pApp); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem); pApp->pMenuItem = gtk_menu_item_new_with_label("Notification"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pApp->pMenuItem), pApp->pMenu); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenuBar), pApp->pMenuItem); pApp->pMenu = gtk_menu_new(); /* A PROPOS DE */ pApp->pMenuItem = gtk_menu_item_new_with_label("A propos de..."); g_signal_connect(G_OBJECT(pApp->pMenuItem), "activate", G_CALLBACK(OnAbout),(gpointer) pApp); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenu), pApp->pMenuItem); pApp->pMenuItem = gtk_menu_item_new_with_label("?"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pApp->pMenuItem), pApp->pMenu); gtk_menu_shell_append(GTK_MENU_SHELL(pApp->pMenuBar), pApp->pMenuItem); /* Ajout du menu a la fenetre */ gtk_box_pack_start(GTK_BOX(pApp->pVBox), pApp->pMenuBar, FALSE, FALSE, 0); /* Creation de la barre d'outils */ pToolbar = gtk_toolbar_new(); gtk_box_pack_start(GTK_BOX(pApp->pVBox), pToolbar, FALSE, FALSE, 0); /* Creation a partir de stock */ gtk_toolbar_insert_stock(GTK_TOOLBAR(pToolbar),GTK_STOCK_NEW, "Options de capture", NULL,NULL,NULL,1); gtk_toolbar_insert_stock(GTK_TOOLBAR(pToolbar),GTK_STOCK_OPEN,"Ouvrir",NULL,NULL,NULL,1); gtk_toolbar_insert_stock(GTK_TOOLBAR(pToolbar),GTK_STOCK_SAVE,"Enregistrer",NULL,NULL,NULL,1); gtk_toolbar_insert_stock(GTK_TOOLBAR(pToolbar),GTK_STOCK_QUIT,"Fermer",NULL,G_CALLBACK(gtk_main_quit),NULL,1); /* Insertion d'un espace */ gtk_toolbar_append_space(GTK_TOOLBAR(pToolbar)); /* Modification de la taille des icones */ gtk_toolbar_set_icon_size(GTK_TOOLBAR(pToolbar),GTK_ICON_SIZE_BUTTON); /* Affichage uniquement des icones */ gtk_toolbar_set_style(GTK_TOOLBAR(pToolbar),GTK_TOOLBAR_ICONS); /**/ pApp->scrollbar = gtk_scrolled_window_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(pApp->pVBox),pApp->scrollbar); pApp->box=gtk_vbox_new(FALSE,5); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(pApp->scrollbar), pApp->box); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(pApp->scrollbar), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_widget_show_all(pApp->pWindow); gtk_main(); return EXIT_SUCCESS; }