Distinction ports destination
Différentiation du port destination de la demande de localisation (envoyée par le mobile) et des paquets capturés par l'AP (envoyés au serveur d'agrégation) : M loc-bts/code/ap/apd.c M loc-bts/code/librtaputil/rtaputil.h M loc-bts/code/client/locclient.c git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@15 785a6c6c-259e-4ff1-8b91-dc31627914f0
This commit is contained in:
parent
9fd568c817
commit
2751fd7905
|
@ -96,20 +96,24 @@ 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 read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet, int sockfd, struct sockaddr_in *server, BOOL print_values)
|
||||||
{
|
{
|
||||||
unsigned char *data = (unsigned char *) packet ; // Recopie dans data l'adresse du paquet capturé
|
unsigned char *data = (unsigned char *) packet ; // Recopie dans data l'adresse du paquet capturé
|
||||||
unsigned short int rtap_bytes ; // Taille des données reçues
|
unsigned short rtap_bytes ; // Taille des données reçues
|
||||||
unsigned char c ;
|
|
||||||
int i ;
|
|
||||||
unsigned int rtap_presentflags, rtap_position ;
|
unsigned int rtap_presentflags, rtap_position ;
|
||||||
couple_message couple ;
|
couple_message couple ; // Message à envoyer à l'agrégateur
|
||||||
ssize_t nsent ; // Retour de sendto
|
ssize_t nsent ; // Retour de sendto
|
||||||
BOOL check[15] ; // Champs présents
|
BOOL check[15] ; // Champs présents
|
||||||
char packet_type ;
|
unsigned char raw_packet_type ; // Type du packet reçu (beacon, data...)
|
||||||
|
char packet_type ; // Type de demande de localisation (demande, calibration)
|
||||||
|
unsigned short dst_port ; // Port destination du paquet capturé
|
||||||
|
int i ; // Compteur
|
||||||
|
|
||||||
memcpy(&rtap_bytes, &data[2], sizeof(unsigned short int)) ; // 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)
|
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)
|
||||||
c = 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)
|
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 (c == 0x08 // Si le paquet est de type data,
|
memcpy((unsigned char*) &dst_port, &data[rtap_bytes+24+8+20+3], 1) ; // On récupère le port de destination (mais il faut retourner les deux octets)
|
||||||
|
memcpy(&((unsigned char*) &dst_port)[1], &data[rtap_bytes+24+8+20+2], 1) ; // (20 : longueur de l'en-tête IP, le port de destination étant les troisièmes et quatrièmes octet suivant).
|
||||||
|
|
||||||
|
if (raw_packet_type == 0x08 // Si le paquet est de type data,
|
||||||
&& data[rtap_bytes+24+8+9] == 0x11 // et de protocole UDP (24 : en-tête 802.11, 8 : en-tête LLC, 9 : position du champ "Protocol" de l'en-tête IP),
|
&& data[rtap_bytes+24+8+9] == 0x11 // et de protocole UDP (24 : en-tête 802.11, 8 : en-tête LLC, 9 : position du champ "Protocol" de l'en-tête IP),
|
||||||
&& data[rtap_bytes+24+8+20+2] == 0x26 && data[rtap_bytes+24+8+20+3] == 0xac) // et le port de destination est 9900 (20 : longueur de l'en-tête IP, le port de destination étant les troisièmes et quatrièmes octet suivant).
|
&& dst_port == LOC_REQUEST_DEFAULT_PORT) // et le port de destination est le bon.
|
||||||
{
|
{
|
||||||
memcpy(couple.ap_mac_addr_bytes, mac, 6); // On copie la MAC de l'AP
|
memcpy(couple.ap_mac_addr_bytes, mac, 6); // On copie la MAC de l'AP
|
||||||
memcpy(couple.mobile_mac_addr_bytes, &data[rtap_bytes+10], 6); // Dans le cas du beacon, l'adresse MAC est 10 octets plus loin
|
memcpy(couple.mobile_mac_addr_bytes, &data[rtap_bytes+10], 6); // Dans le cas du beacon, l'adresse MAC est 10 octets plus loin
|
||||||
|
@ -124,7 +128,7 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *p
|
||||||
{
|
{
|
||||||
case PACKET_TYPE_NORMAL :
|
case PACKET_TYPE_NORMAL :
|
||||||
if (print_values)
|
if (print_values)
|
||||||
printf("Paquet normal reçu.\n") ;
|
printf("\nPaquet normal reçu.\n") ;
|
||||||
couple.direction = 0 ;
|
couple.direction = 0 ;
|
||||||
couple.x_position = 0 ;
|
couple.x_position = 0 ;
|
||||||
couple.y_position = 0 ;
|
couple.y_position = 0 ;
|
||||||
|
@ -133,7 +137,7 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *p
|
||||||
|
|
||||||
case PACKET_TYPE_CALIBRATION :
|
case PACKET_TYPE_CALIBRATION :
|
||||||
if (print_values)
|
if (print_values)
|
||||||
printf("Paquet de calibration reçu.\n") ;
|
printf("\nPaquet de calibration reçu.\n") ;
|
||||||
couple.direction = data[rtap_bytes+24+8+20+8 + 9];
|
couple.direction = data[rtap_bytes+24+8+20+8 + 9];
|
||||||
memcpy(&couple.x_position, &data[rtap_bytes+24+8+20+8+10], sizeof(float));
|
memcpy(&couple.x_position, &data[rtap_bytes+24+8+20+8+10], sizeof(float));
|
||||||
memcpy(&couple.y_position, &data[rtap_bytes+24+8+20+8+14], sizeof(float));
|
memcpy(&couple.y_position, &data[rtap_bytes+24+8+20+8+14], sizeof(float));
|
||||||
|
@ -142,7 +146,7 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *p
|
||||||
|
|
||||||
default :
|
default :
|
||||||
if (print_values)
|
if (print_values)
|
||||||
printf("Paquet bizarre reçu.\n") ;
|
printf("\nPaquet bizarre reçu.\n") ;
|
||||||
fprintf(stderr, "Erreur ! Type de paquet inconnu (%d).\n", packet_type) ;
|
fprintf(stderr, "Erreur ! Type de paquet inconnu (%d).\n", packet_type) ;
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
@ -228,14 +232,11 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *p
|
||||||
rtap_presentflags /= 2 ;
|
rtap_presentflags /= 2 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (print_values)
|
|
||||||
printf("\n") ;
|
|
||||||
|
|
||||||
if (print_values)
|
if (print_values)
|
||||||
{
|
{
|
||||||
char *ap_mac_string = mac_bytes_to_string(couple.ap_mac_addr_bytes) ;
|
char *ap_mac_string = mac_bytes_to_string(couple.ap_mac_addr_bytes) ;
|
||||||
char *mobile_mac_string = mac_bytes_to_string(couple.mobile_mac_addr_bytes) ;
|
char *mobile_mac_string = mac_bytes_to_string(couple.mobile_mac_addr_bytes) ;
|
||||||
printf("\n\
|
printf("\
|
||||||
*** Couple à envoyer ***\n\
|
*** Couple à envoyer ***\n\
|
||||||
\tMAC AP : %s\n\
|
\tMAC AP : %s\n\
|
||||||
\tMAC mobile : %s\n\
|
\tMAC mobile : %s\n\
|
||||||
|
|
|
@ -63,7 +63,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
|
|
||||||
/* Ouverture de la socket UDP vers le serveur d'aggrégation */
|
/* Ouverture de la socket UDP vers le serveur d'aggrégation */
|
||||||
sockfd = create_udp_sending_socket(argv[1], AGGREGATE_DEFAULT_PORT, &server, &client) ;
|
sockfd = create_udp_sending_socket(argv[1], LOC_REQUEST_DEFAULT_PORT, &server, &client) ;
|
||||||
if (sockfd < 0)
|
if (sockfd < 0)
|
||||||
{
|
{
|
||||||
perror("Erreur ! Impossible de créer la socket vers le serveur d'aggrégation \n");
|
perror("Erreur ! Impossible de créer la socket vers le serveur d'aggrégation \n");
|
||||||
|
|
|
@ -25,7 +25,8 @@
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
|
|
||||||
|
|
||||||
#define AGGREGATE_DEFAULT_PORT 9900 // Port d'échange des données
|
#define LOC_REQUEST_DEFAULT_PORT 9900 // Port sur lequel est envoyée la requête de localisation depuis le mobile
|
||||||
|
#define AGGREGATE_DEFAULT_PORT 9901 // Port d'échange des données entre AP et serveur d'aggrégation
|
||||||
|
|
||||||
|
|
||||||
/* Type booléen */
|
/* Type booléen */
|
||||||
|
|
Loading…
Reference in New Issue