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)
|
||||
{
|
||||
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 char c ;
|
||||
int i ;
|
||||
unsigned short rtap_bytes ; // Taille des données reçues
|
||||
unsigned int rtap_presentflags, rtap_position ;
|
||||
couple_message couple ;
|
||||
couple_message couple ; // Message à envoyer à l'agrégateur
|
||||
ssize_t nsent ; // Retour de sendto
|
||||
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)
|
||||
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)
|
||||
if (c == 0x08 // Si le paquet est de type data,
|
||||
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)
|
||||
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+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.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 :
|
||||
if (print_values)
|
||||
printf("Paquet normal reçu.\n") ;
|
||||
printf("\nPaquet normal reçu.\n") ;
|
||||
couple.direction = 0 ;
|
||||
couple.x_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 :
|
||||
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];
|
||||
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));
|
||||
|
@ -142,7 +146,7 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *p
|
|||
|
||||
default :
|
||||
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) ;
|
||||
return ;
|
||||
}
|
||||
|
@ -228,14 +232,11 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *p
|
|||
rtap_presentflags /= 2 ;
|
||||
}
|
||||
|
||||
if (print_values)
|
||||
printf("\n") ;
|
||||
|
||||
if (print_values)
|
||||
{
|
||||
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) ;
|
||||
printf("\n\
|
||||
printf("\
|
||||
*** Couple à envoyer ***\n\
|
||||
\tMAC AP : %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 */
|
||||
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)
|
||||
{
|
||||
perror("Erreur ! Impossible de créer la socket vers le serveur d'aggrégation \n");
|
||||
|
|
|
@ -25,7 +25,8 @@
|
|||
#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 */
|
||||
|
|
Loading…
Reference in New Issue