Thread monitor dans apd

A    code/loc-mobile/TODO
M    code/loc-bts/ap/apd.c : Thread permettant de passer en mode Monitor
     lorsque l'interface Wi-Fi n'y est pas.
M    code/librtaputil/librtaputil.c : Vérification du mode avant le
     passage en Monitor dans iface_mode_monitor().

git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@22 785a6c6c-259e-4ff1-8b91-dc31627914f0
This commit is contained in:
Matteo Cypriani 2008-02-27 16:37:08 +00:00
parent 2f245fc09a
commit fbe2cdec78
7 changed files with 42 additions and 20 deletions

View File

@ -186,19 +186,29 @@ int create_udp_listening_socket(int port)
/* Bascule l'interface Wi-Fi "iface" en mode Monitor */
/* Bascule l'interface Wi-Fi "iface" en mode Monitor si elle n'y est pas déjà */
int iface_mode_monitor(char *iface)
{
struct iwreq wrq ;
int sockfd = iw_sockets_open() ;
strncpy((&wrq)->ifr_name, iface, IFNAMSIZ) ;
wrq.u.mode = IW_MODE_MONITOR ;
if (ioctl(sockfd, SIOCSIWMODE, &wrq) == -1)
strncpy((&wrq)->ifr_name, iface, IFNAMSIZ) ;
if (ioctl(sockfd, SIOCGIWMODE, &wrq) == -1) // Récupération du mode actuel
{
perror("Erreur lors du passage en mode Monitor ") ;
return ERR_SETTING_MONITOR_MODE ;
perror("Erreur lors de la lecture du mode ") ;
return ERR_READING_MODE ;
}
if (wrq.u.mode != IW_MODE_MONITOR) // Si on n'est pas déjà en mode Monitor
{
wrq.u.mode = IW_MODE_MONITOR ;
if (ioctl(sockfd, SIOCSIWMODE, &wrq) == -1) // on y passe.
{
perror("Erreur lors du passage en mode Monitor ") ;
return ERR_SETTING_MONITOR_MODE ;
}
}
return 0 ;

View File

@ -11,6 +11,8 @@
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <sys/time.h>
#include <time.h>
@ -153,7 +155,8 @@ BOOL run ;
#define ERR_SETTING_MONITOR_MODE 101
#define ERR_SETTING_CHANNEL 102
#define ERR_READING_CHANNEL 103
#define ERR_BAD_SIGNAL 104
#define ERR_READING_MODE 104
#define ERR_BAD_SIGNAL 111
/* En-têtes de fonctions */
// Fonctions utilitaires

View File

@ -21,7 +21,7 @@ CFLAGS=-O2 -W -Wall -Wstrict-prototypes -O -I.
DEPFLAGS=-MMD
XCFLAGS=$(CFLAGS) $(DEPFLAGS) $(WARN) $(HEADERS)
PICFLAG=-fPIC
LIBS=-lm -lpcap ../../librtaputil/librtaputil.so.1.0
LIBS=-lm -lpcap -lpthread ../../librtaputil/librtaputil.so.1.0
## Cibles de compilation standard ##

View File

@ -27,6 +27,7 @@ enum {ARGV_AGGREG_IP=1, ARGV_RTAP_IFACE, ARGV_WIFI_IFACE} ;
/* En-têtes des fonctions */
void* keep_mode_monitor(char *iface) ;
int capture(char *capture_iface, char *aggregated_ip, BOOL print_values) ;
void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet, int sockfd, struct sockaddr_in *server, BOOL print_values) ;
void get_mac_addr(char *eth, unsigned char mac_bytes[6]) ;

View File

@ -15,6 +15,7 @@ int main(int argc, char *argv[])
struct sigaction action ; // Structure de mise en place des gestionnaires de signaux
char *mac_string ; // MAC de l'AP sous forme de chaîne
int ret ; // Code de retour du programme
pthread_t thread ; // Thread pour le repassage en mode monitor
if (argc != ARGC)
{
@ -31,6 +32,9 @@ int main(int argc, char *argv[])
action.sa_handler = sigterm_handler ;
sigaction(SIGTERM, &action, NULL) ;
/* Création du thread */
pthread_create(&thread, NULL, (void *) &keep_mode_monitor, argv[ARGV_WIFI_IFACE]) ;
get_mac_addr(argv[ARGV_WIFI_IFACE], mac) ;
mac_string = mac_bytes_to_string(mac) ;
printf("Ma mac est : %s\n", mac_string) ;
@ -44,6 +48,20 @@ int main(int argc, char *argv[])
/* Fonction du thread, qui surveille la liste et envoie les infos au serveur de localisation au bout du timeout */
void* keep_mode_monitor(char *iface)
{
while (run)
{
iface_mode_monitor(iface) ; // Passage de l'interface en mode Monitor.
sleep(5) ; // Pause de 5 secondes.
}
return NULL ;
}
/* Capture des paquets en utilisant l'interface "capture_iface".
* Les données capturées sont envoyées au serveur d'aggrégation dont l'IP est "aggregated_ip".
@ -285,7 +303,7 @@ void get_mac_addr(char *eth, unsigned char mac_bytes[6])
sockfd = socket(AF_INET, SOCK_DGRAM, 0) ;
if(sockfd < 0)
printf("Can't open socket\n") ;
perror("Impossible d'ouvrir la socket pour récupérer l'adresse MAC ") ;
strncpy(ifr.ifr_name, eth, IFNAMSIZ) ;

View File

@ -7,17 +7,6 @@
#include "../../librtaputil/rtaputil.h"
#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#include <sys/time.h>
#include <time.h>
#include <pthread.h>
#define AGGREGATE_TIMEOUT 500 // Timeout d'agrégation (en mili-secondes)

1
loc-mobile/TODO Normal file
View File

@ -0,0 +1 @@
* Mettre l'interface Wi-Fi en paramètre du programme mobile.