From c97ad877e19f6633002118420688f8c00a7282c8 Mon Sep 17 00:00:00 2001 From: Matteo Cypriani Date: Thu, 17 Mar 2011 16:08:33 +0100 Subject: [PATCH] Delete mobile-centred Delete the old mobile-centred infrastructure. --- Makefile | 21 +- TODO | 6 - mobile-centred/Makefile | 63 -- mobile-centred/TODO | 2 - mobile-centred/librtapscanmob/Makefile | 134 ---- .../librtapscanmob/librtapscanmob.c | 601 ------------------ mobile-centred/librtapscanmob/rtapscanmob.h | 73 --- mobile-centred/mobile/Makefile | 75 --- mobile-centred/mobile/mobile.c | 274 -------- 9 files changed, 5 insertions(+), 1244 deletions(-) delete mode 100644 mobile-centred/Makefile delete mode 100644 mobile-centred/TODO delete mode 100644 mobile-centred/librtapscanmob/Makefile delete mode 100644 mobile-centred/librtapscanmob/librtapscanmob.c delete mode 100644 mobile-centred/librtapscanmob/rtapscanmob.h delete mode 100644 mobile-centred/mobile/Makefile delete mode 100644 mobile-centred/mobile/mobile.c diff --git a/Makefile b/Makefile index 4ef275c..5877b49 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ -.PHONY : all libowlps owlps-positioning clean purge help install install-libowlps install-infrastructure-centred install-mobile-centred uninstall uninstall-libowlps uninstall-infrastructure-centred uninstall-mobile-centred +.PHONY : all libowlps owlps-positioning clean purge help install install-libowlps install-infrastructure-centred uninstall uninstall-libowlps uninstall-infrastructure-centred ## Compilation ## -all : libowlps owlps-positioning infrastructure-centred mobile-centred +all : libowlps owlps-positioning infrastructure-centred libowlps : @make -C libowlps @@ -13,12 +13,9 @@ owlps-positioning : infrastructure-centred : libowlps @make -C infrastructure-centred -mobile-centred : libowlps - @make -C mobile-centred - ## Installation ## -install : install-libowlps install-owlps-positioning install-infrastructure-centred install-mobile-centred +install : install-libowlps install-owlps-positioning install-infrastructure-centred install-libowlps : @make -C libowlps install @@ -29,14 +26,11 @@ install-owlps-positioning : install-infrastructure-centred : install-libowlps @make -C infrastructure-centred install -install-mobile-centred : install-libowlps - @make -C mobile-centred install - ## Désinstallation ## -uninstall : uninstall-libowlps uninstall-infrastructure-centred uninstall-mobile-centred +uninstall : uninstall-libowlps uninstall-infrastructure-centred -uninstall-libowlps : uninstall-infrastructure-centred uninstall-mobile-centred +uninstall-libowlps : uninstall-infrastructure-centred @make -C libowlps uninstall uninstall-owlps-positioning : @@ -45,22 +39,17 @@ uninstall-owlps-positioning : uninstall-infrastructure-centred : @make -C infrastructure-centred uninstall -uninstall-mobile-centred : - @make -C mobile-centred uninstall - ## Nettoyage ## clean : @make -C libowlps clean @make -C owlps-positioning clean @make -C infrastructure-centred clean - @make -C mobile-centred clean purge : @make -C libowlps purge @make -C owlps-positioning purge @make -C infrastructure-centred purge - @make -C mobile-centred purge ## Aide ## diff --git a/TODO b/TODO index f12b052..3de2f35 100644 --- a/TODO +++ b/TODO @@ -61,9 +61,3 @@ - Do something about that ° Merge in owlps-positioning? ° Delete? - - -* mobile-centred - -- Has its own TODO file. -- Maybe we should delete that. diff --git a/mobile-centred/Makefile b/mobile-centred/Makefile deleted file mode 100644 index 472f476..0000000 --- a/mobile-centred/Makefile +++ /dev/null @@ -1,63 +0,0 @@ -.PHONY : all librtapscanmob mobile clean purge help install install-librtapscanmob install-mobile uninstall uninstall-librtapscanmob uninstall-mobile - -## Compilation ## - -all : librtapscanmob mobile - -librtapscanmob : - @make -C librtapscanmob - -mobile : - @make -C mobile - -## Installation ## - -install : install-librtapscanmob install-mobile - -install-librtapscanmob : - @make -C librtapscanmob install - -install-mobile : install-librtapscanmob - @make -C mobile install - -## Désinstallation ## - -uninstall : uninstall-librtapscanmob uninstall-mobile - -uninstall-librtapscanmob : uninstall-mobile - @make -C librtapscanmob uninstall - -uninstall-mobile : - @make -C mobile uninstall - -## Nettoyage ## - -clean : - @make -C librtapscanmob clean - @make -C mobile clean - -purge : - @make -C librtapscanmob purge - @make -C mobile purge - -## Aide ## - -help : - @echo "Bibliothèques nécessaires à la compilation :\n\ - libpcap0.8-dev\n\ - librtaputil1.0 (fournie)\n\ - \n\ - Cibles possibles :\n\ - all (cible par défaut) : Compile tous les modules.\n\ - : Compile uniquement le module (et ses dépendances).\n\ - \n\ - install : Installe tous les modules.\n\ - install- : Installe uniquement le module (et ses dépendances).\n\ - \n\ - uninstall : Désinstalle tous les modules.\n\ - uninstall- : Désinstalle uniquement le module (et ses dépendances).\n\ - \n\ - clean : Supprime les fichiers temporaires.\n\ - purge : Supprime le résultat de la compilation.\n\ - \n\ - Note : l'installation se fait dans l'arborescence /usr/local. Modifiez la variable PREFIX de chaque Makefile pour changer ce comportement." diff --git a/mobile-centred/TODO b/mobile-centred/TODO deleted file mode 100644 index 4980a79..0000000 --- a/mobile-centred/TODO +++ /dev/null @@ -1,2 +0,0 @@ -* Mettre l'interface Wi-Fi en paramètre du programme mobile. -* Envoyer les requêtes en broadcast. diff --git a/mobile-centred/librtapscanmob/Makefile b/mobile-centred/librtapscanmob/Makefile deleted file mode 100644 index 1a39cdc..0000000 --- a/mobile-centred/librtapscanmob/Makefile +++ /dev/null @@ -1,134 +0,0 @@ -# Répertoire d'installation -PREFIX=/usr/local -INSTALL_DIR= $(PREFIX)/sbin -INSTALL_LIB= $(PREFIX)/lib -INSTALL_INC= $(PREFIX)/include -INSTALL_MAN= $(PREFIX)/share/man - -# Compilateur -CC = gcc - -# Autres outils -AR = ar -RANLIB = ranlib - -# Commandes d'installation et de désinstallation -RM=rm -fv -CP=cp -v - -# Variables générales -LIB_CIBLE=librtapscanmob -VERSION=1.0 - -# Cibles à construire -STATIC=$(LIB_CIBLE).a -DYNAMIC=$(LIB_CIBLE).so.$(VERSION) -HEADER=rtapscanmob.h -#HEADERS= - -# Composition de la bibliothèque -OBJS=$(LIB_CIBLE).o - -# Flags -CFLAGS=-O2 -W -Wall -Wstrict-prototypes -I. -DEPFLAGS=-MMD -XCFLAGS=$(CFLAGS) $(DEPFLAGS) $(WARN) $(HEADERS) -PICFLAG=-fPIC -LIBS=-lm -lpcap - -#STRIPFLAGS= -Wl,-s - - -## Cibles de compilation standard ## - -all : dynamic static $(PROGS) -dynamic : $(DYNAMIC) -static : $(STATIC) - -% : %.o - $(CC) $(LDFLAGS) $(STRIPFLAGS) $(XCFLAGS) -o $@ $^ -%.o : %.c $(HEADER) - $(CC) $(XCFLAGS) -c $< -%.so : %.c $(HEADER) - $(CC) $(XCFLAGS) $(PICFLAG) -c -o $@ $< - -# Compilation de la bibliothèque dynamique -$(DYNAMIC) : $(OBJS:.o=.so) - $(CC) -shared -o $@ -Wl,-soname,$@ $(STRIPFLAGS) $(LIBS) -lc $^ - -# Compilation de la bibliothèque statique -$(STATIC) : $(OBJS:.o=.so) - $(RM) $@ - $(AR) cru $@ $^ - $(RANLIB) $@ - - -## Installation ## - -install : install-static install-dynamic - -install-dynamic : install-header $(DYNAMIC) - @$(CP) $(DYNAMIC) $(INSTALL_LIB) &&\ - chmod 644 $(INSTALL_LIB)/$(DYNAMIC) &&\ - chown root:root $(INSTALL_LIB)/$(DYNAMIC) &&\ - echo "Reconstruction du cache pour ld.so : ldconfig $(INSTALL_LIB)" ; ldconfig $(INSTALL_LIB) - -install-static : install-header $(STATIC) - @$(CP) $(STATIC) $(INSTALL_LIB) &&\ - chmod 644 $(INSTALL_LIB)/$(STATIC) &&\ - chown root:root $(INSTALL_LIB)/$(STATIC) - -install-header : $(HEADER) - @$(CP) $(HEADER) $(INSTALL_INC) &&\ - chmod 644 $(INSTALL_INC)/$(HEADER) &&\ - chown root:root $(INSTALL_INC)/$(HEADER) - - -## Désinstallation ## - -uninstall : uninstall-static uninstall-dynamic - -uninstall-dynamic : uninstall-header - @$(RM) $(INSTALL_LIB)/$(DYNAMIC) - @echo "Reconstruction du cache pour ld.so : ldconfig" ; ldconfig - -uninstall-static : uninstall-header - @$(RM) $(INSTALL_LIB)/$(STATIC) - -uninstall-header : - @$(RM) $(INSTALL_INC)/$(HEADER) - - -## Nettoyage ## - -clean : - @$(RM) *~ *.o $(LIB_CIBLE).so *.d - -purge : clean - @$(RM) $(DYNAMIC) $(STATIC) $(PROGS) - - -## Aide ## - -help : - @echo -e "Bibliothèques nécessaires à la compilation :\n\ - libpcap0.8-dev\n\ - libowlps1.0 (fournie)\n\ - \n\ - Cibles possibles :\n\ - all (cible par défaut) : Compile la bibliothèque partagée et statique.\n\ - dynamic : Compile la bibilothèque partagée (.so).\n\ - static : Compile la bibliothèque statique (.a).\n\ - \n\ - install : Installe la bibliothèque partagée et statique.\n\ - install-dynamic : N'installe que la bibliothèque partagée.\n\ - install-static : N'installe que la bibliothèque statique.\n\ - \n\ - uninstall : Désinstalle tout ce qu'il est possible de désinstaller.\n\ - uninstall-dynamic : Désinstalle la bibliothèque partagée.\n\ - uninstall-static : Désinstalle la bibliothèque statique.\n\ - \n\ - clean : Supprime les fichiers temporaires.\n\ - purge : Supprime le résultat de la compilation.\n\ - \n\ - Note : l'installation se fait dans l'arborescence $(PREFIX). Modifiez la variable PREFIX du Makefile pour changer ce comportement." diff --git a/mobile-centred/librtapscanmob/librtapscanmob.c b/mobile-centred/librtapscanmob/librtapscanmob.c deleted file mode 100644 index 98ad5e9..0000000 --- a/mobile-centred/librtapscanmob/librtapscanmob.c +++ /dev/null @@ -1,601 +0,0 @@ -/* - * This is the rtapanalyser library, Wi-Fi packet sniffer and analyser, - * thanks to the radiotap header of each packet. - */ - - -#include "rtapscanmob.h" - - - -BOOL run = TRUE ; - - - - -/* Capture des paquets en utilisant l'interface "capture_iface" pendant "capture_time" millisecondes, - * et enregistre les paquets lus dans "results" */ -int capture(char *capture_iface, unsigned long capture_time, mac_list **results, BOOL print_values) -{ - pcap_t *handle ; // Descripteur de capture de paquets - char errbuf[PCAP_ERRBUF_SIZE] ; // Message d'erreur - TIMESTAMP tbegin, tcurrent ; - - - /* Sous-fonction de traitement des paquets capturés */ - void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) - { - read_packet(args, header, packet, results, print_values) ; // On appelle la fonction read_packet() avec les mêmes arguments, plus "results" que l'on passe en modification, et "print_values" qui indique si on doit afficher le paquet. - } - - - handle = pcap_open_live(capture_iface, BUFSIZ, 1, 1000, errbuf) ; // Début de la capture - if (handle == NULL) // Le lancement de la capture a-t-il échoué ? - { - fprintf(stderr, "Impossible d'ouvrir l'interface « %s » : %s\n", capture_iface, errbuf) ; - return ERR_OPENING_IFACE ; - } - - - - if (capture_time > 0) // Si le temps de capture est positif - { - timestamp_now(&tbegin) ; // Récupère l'heure courante (heure du lancement de la capture) - - while (run) - { - pcap_loop(handle, 1, got_packet, NULL) ; // Collecte 1 paquet et appelle la fonction got_packet quand pcaploop a recupéré des paquets - - timestamp_now(&tcurrent) ; // Récupère l'heure courante - if (time_elapsed(tcurrent, tbegin) > capture_time) // Si le temps de capture est écoulé - break ; // on arrête la collecte. - } - } - - else // On fonctionne en mode démon (tant que run est vrai) - while (run) - pcap_loop(handle, 1, got_packet, NULL) ; // Collecte 1 paquet et appelle la fonction got_packet quand pcaploop a recupéré des paquets - - - pcap_close(handle) ; // Arrêt de la capture. - - return 0 ; -} - - - - -/* Traite un paquet et enregistre les valeurs dans la liste des résultats (results) */ -void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet, mac_list **results, BOOL print_values) -{ - unsigned char *data = (unsigned char *) packet ; // Recopie dans data l'adresse du paquet capturé - unsigned short rtap_bytes ; // Taille des données reçues - unsigned int rtap_presentflags, rtap_position ; - BOOL check[15] ; // Champs présents - unsigned char raw_packet_type ; // Type du packet reçu (beacon, data...) - unsigned char mac_addr_bytes[6] ; - mac_list *tmp_mac = NULL ; - ss_list *tmp_ss = NULL ; - int i ; // Compteur - - memcpy(&rtap_bytes, &data[2], sizeof(unsigned short)) ; // Recopie les deux octets à partir du troisième octet de donnée qui est la taille de l'en-tête rtap (change avec des flags) - raw_packet_type = data[rtap_bytes] ; // Au bout de l'en-tête rtap il y a celle du 802.11 dont le premier determine le type (beacon ou pas) - - if (raw_packet_type == RAW_PACKET_TYPE_BEACON) // Si le paquet est de type beacon, on le traite - { - memcpy(mac_addr_bytes, &data[rtap_bytes+10], 6); // Dans le cas du beacon, l'adresse MAC est 10 octets plus loin que le type de paquet - memcpy(&rtap_presentflags, &data[RTAP_P_PRESENTFLAGS], RTAP_L_PRESENTFLAGS); // Récupère les flags de l'en-tête rtap - - /* Ajout du résultat du scan à la structure */ - tmp_ss = malloc(sizeof(ss_list)) ; - tmp_ss->next = NULL ; - memcpy(&(tmp_ss->header_revision), &data[RTAP_P_HREVISION], RTAP_L_HREVISION) ; - memcpy(&(tmp_ss->header_pad), &data[RTAP_P_HPAD], RTAP_L_HPAD) ; - memcpy(&(tmp_ss->header_length), &data[RTAP_P_HLENGTH], RTAP_L_HLENGTH) ; - memcpy(&(tmp_ss->present_flags), &data[RTAP_P_PRESENTFLAGS], RTAP_L_PRESENTFLAGS) ; - - - for(i = 0 ; i < 15 ; i++) // Initialisation de la structure des champs présents - tmp_ss->check[i] = FALSE ; - rtap_position = 8 ; // début des champs déterminés par le present flag - - if (print_values) - { - char *mac_string = mac_bytes_to_string(mac_addr_bytes) ; - printf("[%s]\n", mac_string) ; - printf("Header revision : %hhu\n", tmp_ss->header_revision) ; - printf("Header Pad : %hhu\n", tmp_ss->header_pad) ; - printf("Header Length : %hu\n", tmp_ss->header_length) ; - printf("Present flags : %#010lx\n", tmp_ss->present_flags) ; - free(mac_string) ; - } - - for(i=0 ; i < 15 ; i++) // on teste les 15 premiers bits du champ flag afin de valider la présence et de les copier - { - if((rtap_presentflags % 2) == 1) - { - switch(i) - { - case RTAP_MACTS: - memcpy(&(tmp_ss->mac_timestamp), &data[rtap_position], RTAP_L_MACTS) ; - tmp_ss->check[RTAP_MACTS] = TRUE ; - if (print_values) - printf("Mac timestamp : %llu\n", tmp_ss->mac_timestamp) ; - rtap_position += RTAP_L_MACTS ; - break ; - case RTAP_FLAGS: - memcpy(&(tmp_ss->flags), &data[rtap_position], RTAP_L_FLAGS) ; - tmp_ss->check[RTAP_FLAGS] = TRUE; - if (print_values) - printf("Flags : %hu\n", tmp_ss->flags); - rtap_position += RTAP_L_FLAGS ; - break ; - case RTAP_RATE: - memcpy(&(tmp_ss->data_rate), &data[rtap_position], RTAP_L_RATE) ; - tmp_ss->check[RTAP_RATE] = TRUE; - if (print_values) - printf("Data rate : %hhd MB/s\n", tmp_ss->data_rate / 2) ; - rtap_position += RTAP_L_RATE ; - break ; - case RTAP_CHANNEL: - memcpy(&(tmp_ss->channel), &data[rtap_position], RTAP_L_CHANNEL) ; - rtap_position += RTAP_L_CHANNEL ; - tmp_ss->check[RTAP_CHANNEL] = TRUE; - memcpy(&(tmp_ss->channel_type), &data[rtap_position], RTAP_L_CHANNELTYPE) ; - if (print_values) - printf("Channel : %hu MHz\nChannel Type : %#06x\n", tmp_ss->channel, tmp_ss->channel_type); - rtap_position += RTAP_L_CHANNELTYPE ; - break ; - case RTAP_FHSS: - memcpy(&(tmp_ss->fhss), &data[rtap_position], RTAP_L_FHSS) ; - tmp_ss->check[RTAP_FHSS] = TRUE; - if (print_values) - printf("FHSS : %hu\n", tmp_ss->fhss); - rtap_position += RTAP_L_FHSS ; - break ; - case RTAP_ANTENNASIGNALDBM: - memcpy(&(tmp_ss->antenna_signal_dbm), &data[rtap_position], RTAP_L_ANTENNASIGNALDBM) ; - tmp_ss->check[RTAP_ANTENNASIGNALDBM] = TRUE; - if (print_values) - printf("Antenna Signal : %d dBm\n", tmp_ss->antenna_signal_dbm - 0x100); - rtap_position += RTAP_L_ANTENNASIGNALDBM ; - break ; - case RTAP_ANTENNANOISEDBM: - memcpy(&(tmp_ss->antenna_noise_dbm), &data[rtap_position], RTAP_L_ANTENNANOISEDBM) ; - tmp_ss->check[RTAP_ANTENNANOISEDBM] = TRUE; - if (print_values) - printf("Antenna Noise : %d dBm\n", tmp_ss->antenna_noise_dbm - 0x100); - rtap_position += RTAP_L_ANTENNANOISEDBM ; - break ; - case RTAP_LOCKQUALITY: - memcpy(&(tmp_ss->lock_quality), &data[rtap_position], RTAP_L_LOCKQUALITY) ; - tmp_ss->check[RTAP_LOCKQUALITY] = TRUE; - if (print_values) - printf("Lock Quality : %hu\n", tmp_ss->lock_quality); - rtap_position += RTAP_L_LOCKQUALITY ; - break ; - case RTAP_TXATTENUATION: - memcpy(&(tmp_ss->tx_attenuation), &data[rtap_position], RTAP_L_TXATTENUATION) ; - tmp_ss->check[RTAP_TXATTENUATION] = TRUE; - if (print_values) - printf("Taux Attenuation : %hu\n", tmp_ss->tx_attenuation); - rtap_position += RTAP_L_TXATTENUATION ; - break ; - case RTAP_TXATTENUATIONDB: - memcpy(&(tmp_ss->tx_attenuation_db), &data[rtap_position], RTAP_L_TXATTENUATIONDB) ; - tmp_ss->check[RTAP_TXATTENUATIONDB] = TRUE; - if (print_values) - printf("Atténuation : %hu dB\n", tmp_ss->tx_attenuation_db); - rtap_position += RTAP_L_TXATTENUATIONDB ; - break ; - case RTAP_TXATTENUATIONDBM: - memcpy(&(tmp_ss->tx_attenuation_dbm), &data[rtap_position], RTAP_L_TXATTENUATIONDBM) ; - tmp_ss->check[RTAP_TXATTENUATIONDBM] = TRUE; - if (print_values) - printf("Atténuation : %hu dBm\n", tmp_ss->tx_attenuation_dbm); - rtap_position += RTAP_L_TXATTENUATIONDBM ; - break ; - case RTAP_ANTENNA: - memcpy(&(tmp_ss->antenna), &data[rtap_position], RTAP_L_ANTENNA) ; - tmp_ss->check[RTAP_ANTENNA] = TRUE; - if (print_values) - printf("Antenna : %hhu\n", tmp_ss->antenna); - rtap_position += RTAP_L_ANTENNA ; - break ; - case RTAP_ANTENNASIGNALDB: - memcpy(&(tmp_ss->antenna_signal_db), &data[rtap_position], RTAP_L_ANTENNASIGNALDB) ; - tmp_ss->check[RTAP_ANTENNASIGNALDB] = TRUE; - if (print_values) - printf("Antenna Signal : %hhu dB\n", tmp_ss->antenna_signal_db); - rtap_position += RTAP_L_ANTENNASIGNALDB ; - break ; - case RTAP_ANTENNANOISEDB: - memcpy(&(tmp_ss->antenna_noise_db), &data[rtap_position], RTAP_L_ANTENNANOISEDB) ; - tmp_ss->check[RTAP_ANTENNANOISEDB] = TRUE; - if (print_values) - printf("Antenna Noise : %hhu dB\n", tmp_ss->antenna_noise_db); - rtap_position += RTAP_L_ANTENNANOISEDB ; - break ; - case RTAP_FCS: - memcpy(&(tmp_ss->fcs), &data[rtap_position], RTAP_L_FCS) ; - tmp_ss->check[RTAP_FCS] = TRUE; - if (print_values) - printf("FCS : %lu\n", tmp_ss->fcs) ; - rtap_position += RTAP_L_FCS ; - break ; - } - } - rtap_presentflags /= 2 ; - } - - if (print_values) - printf("\n") ; - - tmp_mac = *results ; - - - if(*results == NULL) // Si la liste de résultats n'existe pas encore, - { - tmp_mac = malloc(sizeof(mac_list)) ; // on la crée. - memcpy(tmp_mac->mac_addr_bytes, mac_addr_bytes, 6) ; - tmp_mac->nb_samples = 1 ; - tmp_mac->next = NULL ; - tmp_mac->samples_list = tmp_ss ; - *results = tmp_mac ; - } - else - { - while(tmp_mac != NULL) - { - if (mac_equals(mac_addr_bytes, - tmp_mac->mac_addr_bytes) == 1) - break ; - tmp_mac = tmp_mac->next ; - } - if(tmp_mac == NULL) - { - tmp_mac = malloc(sizeof(mac_list)) ; - memcpy(tmp_mac->mac_addr_bytes, mac_addr_bytes, 6) ; - tmp_mac->nb_samples = 1 ; - tmp_mac->next = *results ; - tmp_mac->samples_list = tmp_ss ; - *results = tmp_mac ; - } - else - { - tmp_mac->nb_samples++ ; - tmp_ss->next = tmp_mac->samples_list ; - tmp_mac->samples_list = tmp_ss ; - } - } - } -} - - - - -/* Affiche la liste chaînée des résultats */ -void print_mac_list(mac_list *results, BOOL verbose) -{ - mac_list *mac_ptr = results ; // Récupère la liste d'adresse MAC en entrée - ss_list *ss_ptr = NULL ; // Initialise la sous-liste - char *mac_string ; - - double antenna_signal_average = 0 ; // Moyenne des valeurs récupérées de antenna signal en dBm - double antenna_noise_average = 0; // Moyenne des valeurs récupérées de antenna noise en dBm - double data_rate_average = 0; // Moyenne du débit - unsigned short channel = -1 ; // Canal utilisé pour la MAC courante - unsigned short channel_type = -1 ; // Type de liaison utilisée pour la MAC courante - - - if (results == NULL) // Si la liste est vide - { - printf("Aucun résultat.\n") ; // on l'affiche. - return ; - } - - while (mac_ptr != NULL) - { - mac_string = mac_bytes_to_string(mac_ptr->mac_addr_bytes) ; - ss_ptr = mac_ptr->samples_list ; // On récupère le pointeur de la sous-liste - antenna_signal_average = 0 ; - antenna_noise_average = 0 ; - data_rate_average = 0 ; - - while (ss_ptr != NULL) // On parcourt toutes les valeurs de l'affaiblissement en dB et on en fait la moyenne. - { - antenna_signal_average += pow((double)10, ((double)(ss_ptr->antenna_signal_dbm - 0x100) / 10)) ; // Il faut le minorer de 256 pour avoir la vrai puissance car sinon codage serai sur plus d'un octet. - antenna_noise_average += pow((double)10, ((double)(ss_ptr->antenna_noise_dbm - 0x100) / 10)) ; - data_rate_average += ((ss_ptr->data_rate) / 2); - - channel = ss_ptr->channel ; - channel_type = ss_ptr->channel_type ; - - if (verbose) // Affichage du maillon si on est en mode verbeux. - { - printf("[%s]\n", mac_string) ; - print_ss_list(ss_ptr) ; - putchar('\n') ; - } - - ss_ptr = ss_ptr->next ; - } - - /* Calcul des moyennes */ - antenna_signal_average = 10 * log10((double)(antenna_signal_average / mac_ptr->nb_samples)) ; - antenna_noise_average = 10 * log10((double)(antenna_noise_average / mac_ptr->nb_samples)) ; - data_rate_average /= (double)mac_ptr->nb_samples ; - - /* Affichage */ - printf("[%s] [Canal : %hhd] [Fréquence : %hu MHz] [Type de liaison : %#06x] [Moyenne du débit : %0.1f Mo/s] [Moyenne du signal : %0.1f dBm] [Moyenne du bruit : %0.1f dBm]\n", mac_string, frequency_to_channel(channel), channel, channel_type, data_rate_average, antenna_signal_average, antenna_noise_average) ; - if (verbose) - printf("\n\n") ; - - free(mac_string) ; - mac_ptr = mac_ptr->next ; - } -} - - - - -/* Affiche un maillon d'une sous-liste de résultats */ -void print_ss_list(ss_list *ss) -{ - if (ss == NULL) - return ; - - /* Champs statiques */ - printf("Header revision : %hhu\n", ss->header_revision) ; - printf("Header Pad : %hhu\n", ss->header_pad) ; - printf("Header Length : %hu\n", ss->header_length) ; - printf("Present flags : %#010lx\n", ss->present_flags) ; // Largeur de champ 10 : 2 pour "0x" et 8 pour la valeur. - - /* Champs dynamiques */ - if (ss->check[RTAP_MACTS]) - printf("Mac timestamp : %llu\n", ss->mac_timestamp) ; - if (ss->check[RTAP_FLAGS]) - printf("Flags : %hu\n", ss->flags) ; - if (ss->check[RTAP_RATE]) - printf("Data rate : %hhd MB/s\n", ss->data_rate / 2) ; - if (ss->check[RTAP_CHANNEL]) - printf("Channel : %hu MHz\nChannel Type : %#06x\n", ss->channel, ss->channel_type) ; - if (ss->check[RTAP_FHSS]) - printf("FHSS : %hu\n", ss->fhss) ; - if (ss->check[RTAP_ANTENNASIGNALDBM]) - printf("Antenna Signal : %d dBm\n", ss->antenna_signal_dbm - 0x100) ; - if (ss->check[RTAP_ANTENNANOISEDBM]) - printf("Antenna Noise : %d dBm\n", ss->antenna_noise_dbm - 0x100) ; - if (ss->check[RTAP_LOCKQUALITY]) - printf("Lock Quality : %hu\n", ss->lock_quality) ; - if (ss->check[RTAP_TXATTENUATION]) - printf("Taux Attenuation : %hu\n", ss->tx_attenuation) ; - if (ss->check[RTAP_TXATTENUATIONDB]) - printf("Atténuation : %hu dB\n", ss->tx_attenuation_db) ; - if (ss->check[RTAP_TXATTENUATIONDBM]) - printf("Atténuation : %hu dBm\n", ss->tx_attenuation_dbm) ; - if (ss->check[RTAP_ANTENNA]) - printf("Antenna : %hhu\n", ss->antenna) ; - if (ss->check[RTAP_ANTENNASIGNALDB]) - printf("Antenna Signal : %hhu dB\n", ss->antenna_signal_db) ; - if (ss->check[RTAP_ANTENNANOISEDB]) - printf("Antenna Noise : %hhu dB\n", ss->antenna_noise_db) ; - if (ss->check[RTAP_FCS]) - printf("FCS : %lu\n", ss->fcs) ; -} - - - - -/* Vide la liste chaînée d'adresse MAC */ -void free_mac_list(mac_list **results) -{ - mac_list *mac_ptr = *results ; - ss_list *ss_ptr = NULL ; - - if (*results != NULL) - { - while(mac_ptr != NULL) - { - ss_ptr = mac_ptr->samples_list ; - while (ss_ptr != NULL) - { - ss_ptr = ss_ptr->next ; - free(mac_ptr->samples_list) ; - mac_ptr->samples_list = ss_ptr ; - } - mac_ptr = mac_ptr->next ; - free(*results) ; - *results = mac_ptr ; - } - } -} - - - - -/* Enregistre la liste "results" dans le fichier nommé "file" */ -int write_mac_list_to_file(char *file, mac_list *results) -{ - int fd = 0 ; // Descripteur de fichier. - mac_list *ptr ; // Tête de lecture de la liste chaînée. - ss_list *ss_ptr ; // Tête de lecture de la sous-liste. - int mac_list_size = sizeof(mac_list) ; - int ss_list_size = sizeof(ss_list) ; - - - /* Ouverture du fichier */ - fd = open(file, O_WRONLY | O_CREAT) ; - if (fd < 0) - { - perror("Impossible d'ouvrir le fichier de sortie ") ; - return ERR_OPENING_FILE ; - } - - /* Écriture des données */ - ptr = results ; // On commence par la tête de la liste (forcément...). - while (ptr != NULL) - { - /* Enregistrement du maillon de la liste principale */ - if (write(fd, ptr, mac_list_size) != mac_list_size) - perror("Erreur d'écriture (mac_list) ") ; - - /* Enregistrement de la sous-liste */ - ss_ptr = ptr->samples_list ; - while (ss_ptr != NULL) - { - if (write(fd, ss_ptr, ss_list_size) != ss_list_size) // Écriture du maillon courant. - perror("Erreur d'écriture (ss_list) ") ; - ss_ptr = ss_ptr->next ; - } - - ptr = ptr->next ; - } - - - /* Fermeture du fichier */ - if (close(fd) != 0) - { - perror("Erreur lors de la fermeture du fichier de sortie ") ; - return ERR_CLOSING_FILE ; - } - - return 0 ; -} - - - - -/* Lit le fichier nommé "file" et enregistre la liste lue dans "results" */ -int read_mac_list_from_file(char *file, mac_list **results) -{ - int fd = 0 ; // Descripteur de fichier. - mac_list *ptr = NULL ; // Tête de lecture de la liste chaînée. - ss_list *ss_ptr ; // Tête de lecture de la sous-liste. - ss_list *ss_prev ; // Maillon précédent lors de la lecture. - int mac_list_size = sizeof(mac_list) ; - int ss_list_size = sizeof(ss_list) ; - mac_list mac_list_lu ; - ss_list ss_list_lu ; - - - /* Ouverture du fichier */ - fd = open(file, O_RDONLY) ; - if (fd < 0) - { - perror("Impossible d'ouvrir le fichier d'entrée ") ; - return ERR_OPENING_FILE ; - } - - /* Lecture des données */ - while (read(fd, &mac_list_lu, mac_list_size) == mac_list_size) // Lecture du premier champ - { - /* Allocation du maillon courant */ - if (*results == NULL) - { - *results = malloc(mac_list_size) ; // Création de la liste - ptr = *results ; - } - else - { - ptr->next = malloc(mac_list_size) ; // Création du maillon suivant - ptr = ptr->next ; - } - *ptr = mac_list_lu ; - - /* Lecture de la sous-liste */ - ss_prev = NULL ; - ss_ptr = ptr->samples_list ; - while (ss_ptr != NULL) - { - if (read(fd, &ss_list_lu, ss_list_size) != ss_list_size) // Lecture d'un maillon ss_list. - perror("Erreur de lecture (ss_list) ") ; - else // Si on a bien lu un maillon entier : - { - if (ss_prev == NULL) // Si c'est le premier maillon, - { - ptr->samples_list = malloc(ss_list_size) ; // allocation du premier maillon. - ss_ptr = ptr->samples_list ; - } - else // Si ce n'est pas le premier maillon, - { - ss_prev->next = malloc(ss_list_size) ; // allocation d'un nouveau maillon. - ss_ptr = ss_prev->next ; - } - *ss_ptr = ss_list_lu ; - - ss_prev = ss_ptr ; - ss_ptr = ss_ptr->next ; - } - } - if (ss_prev != NULL) - ss_prev->next = NULL ; - } - - if (ptr != NULL) - ptr->next = NULL ; - - - /* Fermeture du fichier */ - if (close(fd) != 0) - perror("Erreur lors de la fermeture du fichier de sortie ") ; - - return 0 ; -} - - - - -/* Enregistre la liste "results" dans le fichier nommé "file", au format texte */ -int write_mac_list_to_text_file(char *file, mac_list *results, char direction, float pos_x, float pos_y, float pos_z) -{ - FILE *fd = NULL ; // Descripteur de fichier. - mac_list *ptr ; // Tête de lecture de la liste chaînée. - ss_list *ss_ptr ; // Tête de lecture de la sous-liste. - - - /* Ouverture du fichier */ - fd = fopen(file, "a") ; // Ouverture du fichier de sortie en ajout - if (fd == NULL) // Si ouverture échouée, - { - perror("Impossible d'ouvrir le fichier de sortie ") ; - fprintf(stderr, "Redirection de la sortie sur la sortie standard.") ; - fd = stdout ; // on redirige sur stdout - } - - /* Écriture des données */ - ptr = results ; // On commence par la tête de la liste (forcément...). - while (ptr != NULL) - { - char *mac_string ; - - /* Enregistrement des données fixes */ - fprintf(fd, "%0.2f;%0.2f;%0.2f;%hhd", pos_x, pos_y, pos_z, direction) ; - - /* Enregistrement du maillon de la liste principale */ - mac_string = mac_bytes_to_string(ptr->mac_addr_bytes) ; - fprintf(fd, ";%s", mac_string) ; - - /* Enregistrement de la sous-liste */ - ss_ptr = ptr->samples_list ; - while (ss_ptr != NULL) - { - fprintf(fd, ";%d", ss_ptr->antenna_signal_dbm - 0x100) ; // Écriture de la puissance du signal - ss_ptr = ss_ptr->next ; - } - - fprintf(fd, "\n") ; - - free(mac_string) ; - ptr = ptr->next ; - } - - /* Fermeture du fichier */ - if (fclose(fd) != 0) - { - perror("Erreur lors de la fermeture du fichier de sortie ") ; - return ERR_CLOSING_FILE ; - } - - return 0 ; -} diff --git a/mobile-centred/librtapscanmob/rtapscanmob.h b/mobile-centred/librtapscanmob/rtapscanmob.h deleted file mode 100644 index 646f74d..0000000 --- a/mobile-centred/librtapscanmob/rtapscanmob.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * This is the rtapanalyser library, Wi-Fi packet sniffer and analyser, - * thanks to the radiotap header of each packet. - */ - -#ifndef _LIB_RTAPSCANMOB_H -#define _LIB_RTAPSCANMOB_H - - -#include - -#include "../../libowlps/owlps.h" - - - -/* Liste chaînée des valeurs des champs rtap */ -typedef struct _ss_list -{ - unsigned char header_revision ; - unsigned char header_pad ; - unsigned short header_length ; - unsigned short fhss; - unsigned long present_flags ; - unsigned long long mac_timestamp ; - unsigned char flags; - unsigned char data_rate ; - unsigned short channel ; - unsigned short channel_type ; - unsigned char antenna_signal_dbm ; - unsigned char antenna_noise_dbm ; - unsigned char antenna ; - unsigned short lock_quality ; - unsigned short tx_attenuation ; - unsigned short tx_attenuation_db ; - unsigned char tx_attenuation_dbm ; - unsigned char antenna_signal_db ; - unsigned char antenna_noise_db ; - unsigned long fcs ; - BOOL check[15] ; // Champs présents - struct _ss_list *next ; -} ss_list ; - - -/* Liste chaînée des adresses MAC en provenances desquelles on a capturé des paquets */ -typedef struct _mac_list -{ - unsigned short int nb_samples ; // Nombre d'occurrences de l'adresse MAC - unsigned char mac_addr_bytes[6] ; // Adresse MAC en octets - ss_list *samples_list ; // Liste des valeurs capturées pour cette adresse - struct _mac_list *next ; // Élément suivant de la liste -} mac_list ; - - -/* Codes d'erreurs */ -#define ERR_FILENAME 1 // Erreur dans le nom du fichier d'entrée ou de sortie -#define ERR_OPENING_FILE 2 // Erreur lors de l'ouverture du fichier d'entrée ou de sortie -#define ERR_OPENING_IFACE 3 // Erreur lors de l'ouverture de l'interface de capture -#define ERR_CAPTURE_TIME_FORMAT 4 // Format du temps de capture incorrect -#define ERR_CLOSING_FILE 5 // Erreur lors de la fermeture du fichier de sortie - - -/* En-têtes des fonctions */ -int capture(char *capture_iface, unsigned long capture_time, mac_list **results, BOOL print_values) ; -void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet, mac_list **results, BOOL print_values) ; -void print_mac_list(mac_list *results, BOOL verbose) ; -void print_ss_list(ss_list *ss) ; -void free_mac_list(mac_list **results) ; -int write_mac_list_to_file(char *file, mac_list *results) ; -int read_mac_list_from_file(char *file, mac_list **results) ; -int write_mac_list_to_text_file(char *file, mac_list *results, char direction, float pos_x, float pos_y, float pos_z) ; - - -#endif diff --git a/mobile-centred/mobile/Makefile b/mobile-centred/mobile/Makefile deleted file mode 100644 index d5d5853..0000000 --- a/mobile-centred/mobile/Makefile +++ /dev/null @@ -1,75 +0,0 @@ -# Répertoire d'installation -PREFIX=/usr/local -INSTALL_DIR= $(PREFIX)/sbin -INSTALL_LIB= $(PREFIX)/lib -INSTALL_INC= $(PREFIX)/include -INSTALL_MAN= $(PREFIX)/share/man - -# Compilateur -CC = gcc - -# Commandes d'installation et de désinstallation -RM=rm -fv -CP=cp -v - -# Cible -TARGET=mobile -HEADER= - -# Flags -CFLAGS=-O2 -W -Wall -Wstrict-prototypes -O -I. -DEPFLAGS=-MMD -XCFLAGS=$(CFLAGS) $(DEPFLAGS) $(WARN) $(HEADERS) -PICFLAG=-fPIC -LIBS=../../libowlps/libowlps.so.1.0 ../librtapscanmob/librtapscanmob.so.1.0 - - -## Cibles de compilation standard ## - -.PHONY : all install uninstall clean purge help - -all : $(TARGET) - -% : %.o - $(CC) $(LDFLAGS) $(STRIPFLAGS) $(XCFLAGS) -o $@ $^ $(LIBS) -%.o : %.c $(HEADER) - $(CC) $(XCFLAGS) -c $< - -# Compilation du programme -$(TARGET) : $(TARGET).o $(HEADER) - - -## Installation / désinstallation ## - -install : $(TARGET) - @$(CP) $(TARGET) $(INSTALL_DIR) - @cd $(INSTALL_DIR) ; chown root:root $(TARGET) ; chmod 755 $(TARGET) - -uninstall : - @$(RM) $(INSTALL_DIR)/$(TARGET) - - -## Nettoyage ## - -clean : - @$(RM) -fv *~ *.o *.d - -purge : clean - @$(RM) -fv $(TARGET) - - -## Aide ## - -help : - @echo "Bibliothèques nécessaires à la compilation :\n\ - librtaputil1.0 (fournie)\n\ - librtapscanmob1.0 (fournie)\n\ - \n\ - Cibles possibles :\n\ - $(TARGET) (cible par défaut) : Compile le programme $(TARGET).\n\ - install : Installe le programme $(TARGET).\n\ - uninstall : Désinstalle le programme $(TARGET).\n\ - clean : Supprime les fichiers temporaires.\n\ - purge : Supprime le résultat de la compilation.\n\ - \n\ - Note : l'installation se fait dans l'arborescence $(PREFIX). Modifiez la variable PREFIX du Makefile pour changer ce comportement." diff --git a/mobile-centred/mobile/mobile.c b/mobile-centred/mobile/mobile.c deleted file mode 100644 index c95f53d..0000000 --- a/mobile-centred/mobile/mobile.c +++ /dev/null @@ -1,274 +0,0 @@ -/* - * This is the rtapanalyser library, Wi-Fi packet sniffer and analyser, - * thanks to the radiotap header of each packet. - */ - - -#include "../librtapscanmob/rtapscanmob.h" - - - -/* Options du programme */ -#define DEFAULT_IFACE "rtap0" // Interface de capture par défaut. -#define DEFAULT_CAPTURE_TIME 5000 // Temps de capture par défaut en milli-secondes. -#define MAX_FILENAME_LENGTH 500 // Longueur maximale du nom des fichiers. -#define MAX_OPT_LENGTH 6 // Longueur maximale des options sur la ligne de commandes. -#define NB_OPTIONS 11 // Nombre d'options. -enum {NUM_OPT_HELP, NUM_OPT_IFACE, NUM_OPT_CAPTURE_TIME, NUM_OPT_OUTPUT, NUM_OPT_INPUT, NUM_OPT_VERB, NUM_OPT_VERB2, NUM_OPT_DIRECTION, NUM_OPT_POSX, NUM_OPT_POSY, NUM_OPT_POSZ} ; // Liste des numéros d'options. -#define OPT_HELP "-h" // Option d'affichage de l'aide. -#define OPT_OUTPUT "-o" // Option d'enregistrement des résultats dans un fichier. -#define OPT_INPUT "-i" // Option de lecture des trames enregistrées avec -o. -#define OPT_IFACE "-d" // Option de spécification de l'interface de capture. -#define OPT_CAPTURE_TIME "-t" // Option de spécification du temps de capture. -#define OPT_VERB "-v" // Option de verbosité. -#define OPT_VERB2 "-vv" // Option de verbosité maximale. -#define OPT_DIRECTION "-dir" // Option de calibration (direction). -#define OPT_POSX "-posx" // Option de calibration (position en X). -#define OPT_POSY "-posy" // Option de calibration (position en Y). -#define OPT_POSZ "-posz" // Option de calibration (position en Z). -#define ERR_BAD_OPTION 50 // Code d'erreur en cas de mauvaise option de ligne de commande. -#define ERR_OPT_INPUT_OUTPUT 51 // Erreur d'incompatibilité entre les deux options entrée et sortie de/vers fichier. -#define ERR_OPT_CALIBRATION 52 // Erreur si toutes les options de calibration ne sont pas présentes. - - - -/* Affiche la syntaxe du programme */ -void print_usage(char *prog) -{ - printf("Usage :\n\ -\t%s -h\n\ -\t%s [ -v ] [ -i fichier ]\n\ -\t%s [ -v | -vv ] [ -d interface ] [ -t temps ] [ -o fichier ] [ -dir direction -posx x -posy y -posz z ]\n\ -", prog, prog, prog) ; -} - - - -/* Affiche la syntaxe du programme */ -void print_usage_only(char *prog) -{ - putchar('\n') ; - - print_usage(prog) ; - - printf("\nPour afficher l'aide, tapez « %s -h ».\n", prog) ; -} - - - -/* Affiche l'aide complète du programme */ -void print_help(char *prog) -{ - print_usage(prog) ; - - printf("\n\ -Options :\n\ -\t-h : affiche cette aide.\n\ -\t-v : affichage détaillé.\n\ -\t-vv : affichage très détaillé.\n\ -\t-i fichier : lit les informations depuis le fichier « fichier » plutôt que de tenter de capturer des paquets.\n\ -\t-o fichier : enregistre les informations capturées dans le fichier « fichier ».\n\ -\t-d interface : les paquets sont capturés sur l'interface réseau « interface ». Par défaut, « %s » est utilisée.\n\ -\t-t temps : les paquets sont capturés pendant « temps » millisecondes. Par défaut, « temps » vaut %d.\n\ -\t-dir direction : dans le cas de la calibration, indique que la mesure est effectuée vers « direction » (entier de 1 à 4).\n\ -\t-posx x : dans le cas de la calibration, indique que la position en X du mobile est « x » (flottant).\n\ -\t-posy y : dans le cas de la calibration, indique que la position en Y du mobile est « y » (flottant).\n\ -\t-posz z : dans le cas de la calibration, indique que la position en Z du mobile est « z » (flottant).\n\ -\n\ -Note : votre interface de capture doit être en mode « monitor », et supporter radiotap.\n\ -", DEFAULT_IFACE, DEFAULT_CAPTURE_TIME) ; -} - - - -/* Analyse les options de la ligne de commandes */ -void read_options(int argc, char **argv, BOOL *options, char *capture_iface, int *capture_time, char *file, char *direction, float *pos_x, float *pos_y, float *pos_z) -{ - int i ; // Compteur. - char num_prev_opt = -1 ; // Numéro de la dernière option lue, si elle prend un argument. Ne doit pas être positionné lors de la lecture des options ne prenant pas d'argument ; doit être repositionnée à -1 après le traitement de l'option. - - - /* Initialisation du tableau d'options à FALSE */ - for (i = 0 ; i < NB_OPTIONS ; i++) - options[i] = FALSE ; - - - /* Lecture des options */ - for (i = 1 ; i < argc ; i++) - { - if (num_prev_opt != -1) - { - /* Cas des options suivies d'un argument (exemple : « -o fichier ») */ - switch (num_prev_opt) - { - case NUM_OPT_OUTPUT : - case NUM_OPT_INPUT : - strncpy(file, argv[i], MAX_FILENAME_LENGTH) ; - break ; - case NUM_OPT_IFACE : - strncpy(capture_iface, argv[i], IFNAMSIZ) ; - break ; - case NUM_OPT_CAPTURE_TIME : - *capture_time = atoi(argv[i]) ; - break ; - case NUM_OPT_DIRECTION : - *direction = atoi(argv[i]) ; - break ; - case NUM_OPT_POSX : - *pos_x = atof(argv[i]) ; - break ; - case NUM_OPT_POSY : - *pos_y = atof(argv[i]) ; - break ; - case NUM_OPT_POSZ : - *pos_z = atof(argv[i]) ; - break ; - } - num_prev_opt = -1 ; - } - - else if (strncmp(argv[i], OPT_HELP, MAX_OPT_LENGTH) == 0) - { - print_help(argv[0]) ; - exit(0) ; - } - - else if (strncmp(argv[i], OPT_IFACE, MAX_OPT_LENGTH) == 0) - { - options[NUM_OPT_IFACE] = TRUE ; - num_prev_opt = NUM_OPT_IFACE ; - } - - else if (strncmp(argv[i], OPT_CAPTURE_TIME, MAX_OPT_LENGTH) == 0) - { - options[NUM_OPT_CAPTURE_TIME] = TRUE ; - num_prev_opt = NUM_OPT_CAPTURE_TIME ; - } - - else if (strncmp(argv[i], OPT_OUTPUT, MAX_OPT_LENGTH) == 0) - { - options[NUM_OPT_OUTPUT] = TRUE ; - num_prev_opt = NUM_OPT_OUTPUT ; - } - - else if (strncmp(argv[i], OPT_INPUT, MAX_OPT_LENGTH) == 0) - { - options[NUM_OPT_INPUT] = TRUE ; - num_prev_opt = NUM_OPT_INPUT ; - } - - else if (strncmp(argv[i], OPT_VERB, MAX_OPT_LENGTH) == 0) - { - if (options[NUM_OPT_VERB] == TRUE) // Si l'option est déjà présente, - options[NUM_OPT_VERB2] = TRUE ; // on active le deuxième niveau de verbosité. - else - options[NUM_OPT_VERB] = TRUE ; - } - - else if (strncmp(argv[i], OPT_VERB2, MAX_OPT_LENGTH) == 0) - { - options[NUM_OPT_VERB] = TRUE ; - options[NUM_OPT_VERB2] = TRUE ; - } - - else if (strncmp(argv[i], OPT_DIRECTION, MAX_OPT_LENGTH) == 0) - { - options[NUM_OPT_DIRECTION] = TRUE ; - num_prev_opt = NUM_OPT_DIRECTION ; - } - - else if (strncmp(argv[i], OPT_POSX, MAX_OPT_LENGTH) == 0) - { - options[NUM_OPT_POSX] = TRUE ; - num_prev_opt = NUM_OPT_POSX ; - } - - else if (strncmp(argv[i], OPT_POSY, MAX_OPT_LENGTH) == 0) - { - options[NUM_OPT_POSY] = TRUE ; - num_prev_opt = NUM_OPT_POSY ; - } - - else if (strncmp(argv[i], OPT_POSZ, MAX_OPT_LENGTH) == 0) - { - options[NUM_OPT_POSZ] = TRUE ; - num_prev_opt = NUM_OPT_POSZ ; - } - - else - { - print_usage_only(argv[0]) ; - fprintf(stderr, "Option inconnue « %s » !\n\n", argv[i]) ; - exit(ERR_BAD_OPTION) ; - } - } - - - /* Vérifications des options */ - if (options[NUM_OPT_OUTPUT] == TRUE || options[NUM_OPT_INPUT] == TRUE) - if (file[0] == '\0') - { - fprintf(stderr, "Vous devez spécifier un nom de fichier après les options -i et -o !\n") ; - print_usage_only(argv[0]) ; - exit(ERR_FILENAME) ; - } - if (options[NUM_OPT_OUTPUT] == TRUE && options[NUM_OPT_INPUT] == TRUE) - { - fprintf(stderr, "Les options -i et -o sont incompatibles !\n") ; - print_usage_only(argv[0]) ; - exit(ERR_OPT_INPUT_OUTPUT) ; - } - if ((options[NUM_OPT_DIRECTION] || options[NUM_OPT_POSX] || options[NUM_OPT_POSY] || options[NUM_OPT_POSZ]) && ! (options[NUM_OPT_DIRECTION] && options[NUM_OPT_POSX] && options[NUM_OPT_POSY] && options[NUM_OPT_POSZ])) - { - fprintf(stderr, "Vous devez spécifier toutes les options de calibration ou aucune !\n") ; - print_usage_only(argv[0]) ; - exit(ERR_OPT_CALIBRATION) ; - } -} - - - -int main(int argc, char **argv) -{ - BOOL options[NB_OPTIONS] ; // Tableau des options présentes. - char capture_iface[IFNAMSIZ] = DEFAULT_IFACE ; // Interface d'entrée - int capture_time = DEFAULT_CAPTURE_TIME ; // Temps de capture - char file[MAX_FILENAME_LENGTH] = "\0" ; // Nom du fichier à lire ou écrire. - char direction = 0 ; // Direction de la calibration. - float pos_x = 0, pos_y = 0, pos_z = 0 ; // Positions de la calibration. - mac_list *results = NULL ; - int ret = 0 ; // Valeur de retour des fonctions appelées. - - /* Lecture des options de la ligne de commande */ - read_options(argc, argv, options, capture_iface, &capture_time, file, &direction, &pos_x, &pos_y, &pos_z) ; - - if (options[NUM_OPT_INPUT] == TRUE) // Si l'option INPUT est présente, - { - if ((ret = read_mac_list_from_file(file, &results)) != 0) // Lecture du fichier. - return ret ; - print_mac_list(results, options[NUM_OPT_VERB]) ; // Affichage. - free_mac_list(&results) ; // Nettoyage - return 0 ; - } - - printf("Interface de capture : %s\nTemps de capture : %d\n\n", capture_iface, capture_time) ; - - iface_mode_monitor("eth2") ; // Passage de l'interface Wi-Fi en mode Monitor. FIXME ! mettre l'interface Wi-Fi en paramètre du programme (wifi_iface != capture_iface, cf. apd.c). - - - /**** THREAAAAAAAAAD !!!!!!!! ****/ - - - if ((ret = capture(capture_iface, capture_time, &results, options[NUM_OPT_VERB])) != 0) // Capture de paquets. - return ret ; // On quitte avec le code d'erreur si la capture a mal fini. - - print_mac_list(results, options[NUM_OPT_VERB2]) ; // Affichage des paquets capturés. - - if (options[NUM_OPT_OUTPUT] == TRUE) // Si l'option OUTPUT est présente, - // ret = write_mac_list_to_file(file, results) ; - ret = write_mac_list_to_text_file(file, results, direction, pos_x, pos_y, pos_z) ; - - free_mac_list(&results) ; // Nettoyage - - return ret ; -}