Commit ad076126db864abf2110f376fe89af50d75eea60

Authored by rcavalie
1 parent 1eb4c27f

Début KPPV pour ping

Showing 2 changed files with 164 additions and 23 deletions   Show diff stats
python/main_kppv.py 0 → 100644
... ... @@ -0,0 +1,135 @@
  1 +"""
  2 +Created on Thu Jan 11 15:22:56 2018
  3 +@author: Robin Cavalieri
  4 +IMA5SC - PFE 2018
  5 +P32 - Détection automatique de DoS sur réseau LoRa
  6 +Main avec méthode des KPPV
  7 +"""
  8 +###############################################################################
  9 +#LIBRAIRIES UTILES
  10 +###############################################################################
  11 +import time;
  12 +import serial;
  13 +import numpy as np;
  14 +import pandas as pd;
  15 +###############################################################################
  16 +
  17 +##############################################################################
  18 +#DEFINITION DE LA LECTURE DE PORT
  19 +##############################################################################
  20 +ser = serial.Serial(
  21 + #Pour Linux
  22 + #port='/dev/ttyACM0',
  23 + #Pour Windows
  24 + port='COM4',
  25 + #Vitesse de communication
  26 + baudrate = 9600,
  27 + #Parité
  28 + parity=serial.PARITY_NONE,
  29 + #Bit de stop
  30 + stopbits=serial.STOPBITS_ONE,
  31 + #Taille du message
  32 + bytesize=serial.EIGHTBITS,
  33 + #Out
  34 + timeout=1
  35 +)
  36 +counter=0;
  37 +##############################################################################
  38 +
  39 +###############################################################################
  40 +#TRAVAIL PRELIMINAIRE DE TRAITEMENT DES DONNEES D'APPRENTISSAGE
  41 +###############################################################################
  42 +# Ouverture des bases d'apprentissage
  43 +dataset_ping_norm = pd.read_csv('C:/Users/Utilisateur/PFE/python/datasets/ping_norm.csv');
  44 +dataset_ping_attack = pd.read_csv('C:/Users/Utilisateur/PFE/python/datasets/ping_attack.csv');
  45 +dataset_rssi_norm = pd.read_csv('C:/Users/Utilisateur/PFE/python/datasets/rssi_norm.csv');
  46 +dataset_rssi_attack = pd.read_csv('C:/Users/Utilisateur/PFE/python/datasets/rssi_attack.csv');
  47 +
  48 +#Concatenation pour avoir une base de ping et une base de rssi
  49 +dataset_ping = np.concatenate((dataset_ping_attack, dataset_ping_norm), axis=0);
  50 +dataset_rssi = np.concatenate((dataset_rssi_attack, dataset_rssi_norm), axis=0);
  51 +
  52 +#Récupération des tailles de matrices
  53 +[X_ping, Y_ping] = np.shape(dataset_ping);
  54 +[X_rssi, Y_rssi] = np.shape(dataset_rssi);
  55 +###############################################################################
  56 +
  57 +###############################################################################
  58 +#KPPV PING
  59 +###############################################################################
  60 +def prediction_ping(ping):
  61 + dataset_ping_temp = [];
  62 + cpt = 0;
  63 + k = 5;
  64 + #Remplissage des distances euclidiennes
  65 + for i in range(0, X_ping-1):
  66 + dataset_ping_temp[i][0] = ((dataset_ping[i][1]-ping)**2)**0.5;
  67 + #Concatenation avec distances euclidiennes
  68 + dataset_ping_temp = np.c_[dataset_ping, dataset_ping_temp];
  69 + #Tri
  70 + np.sort(dataset_ping_temp, axis=2);
  71 + #Checking des k premiers voisins
  72 + for j in range(0, k-1):
  73 + if(dataset_ping_temp[i][0]==1):
  74 + cpt = cpt+1;
  75 + if(cpt >= (k/2)+1):
  76 + return 1; #Attaque
  77 + else:
  78 + return 0; #RAS
  79 +
  80 +
  81 +t = prediction_ping(1000);
  82 +###############################################################################
  83 +#AFFICHAGE
  84 +###############################################################################
  85 +def Recorder():
  86 + global temp;
  87 + global temp_read;
  88 + global ping_mesured;
  89 + global puissance_read;
  90 + global trame_read;
  91 + global cpt_trames;
  92 + global cpt_trames_temp;
  93 + while(1):
  94 + #RECUPERATION DES DONNEES
  95 + x = ser.readline();
  96 +
  97 + if(0x7C in x):
  98 + #Lecture de la trame
  99 + trame_read = x;
  100 + #Récupération du compteur de trames
  101 + cpt_trames = (trame_read[15]-48)*100 + (trame_read[16]-48)*10 + (trame_read[17]-48);
  102 +
  103 + if(0x7C in x and cpt_trames == 1):
  104 + temp = time.time();
  105 +
  106 + if(0x7C in x and cpt_trames > 1):
  107 + t2 = time.time();
  108 + ping_mesured = (t2-temp)*1000;
  109 + #Récupération de la température
  110 + temp_read = (trame_read[12]-48)*10 + trame_read[13]-48;
  111 + #Récupération de la puissance
  112 + x = ser.readline();
  113 + puissance_read = (x[1]-48)*10 + x[2]-48;
  114 + #T2
  115 + temp = t2;
  116 +
  117 + if(cpt_trames_temp+1 == cpt_trames):
  118 + #AFFICHAGE
  119 + print("\n###############################\n");
  120 + print("TRAME : "+ "".join(map(chr, trame_read))+"\n");
  121 + print("TRAME NUM. : "+str(cpt_trames)+"\n");
  122 + print("TEMPERATURE : "+str(temp_read)+" °C\n");
  123 + print("PUISSANCE : "+str(puissance_read)+" dBm\n");
  124 + print("PING : "+str(ping_mesured)+" ms\n");
  125 + print("###############################\n");
  126 +
  127 + cpt_trames_temp = cpt_trames;
  128 +###############################################################################
  129 +
  130 +###############################################################################
  131 +#MAIN
  132 +###############################################################################
  133 +if __name__ == '__main__':
  134 + Recorder();
  135 +###############################################################################
0 136 \ No newline at end of file
... ...
python/main_simple.py
... ... @@ -92,33 +92,36 @@ def Predictions(data_eval):
92 92 #AFFICHAGE
93 93 ###############################################################################
94 94 def Recorder():
95   - cpt_trame = 0;
96 95 global temp;
97 96 global temp_read;
98 97 global ping_mesured;
99 98 global puissance_read;
100 99 global trame_read;
101 100 global cpt_trames;
  101 + global cpt_trames_temp;
102 102 while(1):
103 103 #RECUPERATION DES DONNEES
104 104 x = ser.readline();
105   - if(0x46 in x and cpt_trame == 0):
106   - cpt_trame = cpt_trame + 1;
  105 +
  106 + if(0x7C in x):
  107 + #Lecture de la trame
  108 + trame_read = x;
  109 + #Récupération du compteur de trames
  110 + cpt_trames = (trame_read[15]-48)*100 + (trame_read[16]-48)*10 + (trame_read[17]-48);
  111 +
  112 + if(0x7C in x and cpt_trames == 1):
107 113 temp = time.time();
108   - if(0x46 in x and cpt_trame >= 1):
  114 +
  115 + if(0x7C in x and cpt_trames > 1):
109 116 t2 = time.time();
110 117 ping_mesured = (t2-temp)*1000;
111   - temp = t2;
112   - cpt_trame = cpt_trame + 1;
113   - #Lecture de la trame
114   - trame_read = x;
115 118 #Récupération de la température
116 119 temp_read = (trame_read[12]-48)*10 + trame_read[13]-48;
117   - #Récupération du compteur de trames
118   - cpt_trames = (trame_read[15]-48)*100 + (trame_read[16]-48)*10 + (trame_read[17]-48);
119 120 #Récupération de la puissance
120 121 x = ser.readline();
121 122 puissance_read = (x[1]-48)*10 + x[2]-48;
  123 + #T2
  124 + temp = t2;
122 125  
123 126 #SET INPUTS PREDICTION
124 127 data_to_pred = np.array((ping_mesured, puissance_read),dtype = np.int64);
... ... @@ -127,19 +130,22 @@ def Recorder():
127 130 #PREDICTION TEMPS REEL
128 131 pred = Predictions(data_to_pred);
129 132  
130   - #AFFICHAGE
131   - print("\n###############################\n");
132   - print("TRAME : "+ "".join(map(chr, trame_read))+"\n");
133   - print("TRAME NUM. : "+str(cpt_trames)+"\n");
134   - print("TEMPERATURE : "+str(temp_read)+" °C\n");
135   - print("PUISSANCE : "+str(puissance_read)+" dBm\n");
136   - print("PING : "+str(ping_mesured)+" ms\n");
137   - np.round(pred,0);
138   - if(pred==0):
139   - print("TRAFIC : ATTAQUE\n");
140   - elif(pred==1):
141   - print("TRAFIC : RAS\n");
142   - print("###############################\n");
  133 + if(cpt_trames_temp+1 == cpt_trames):
  134 + #AFFICHAGE
  135 + print("\n###############################\n");
  136 + print("TRAME : "+ "".join(map(chr, trame_read))+"\n");
  137 + print("TRAME NUM. : "+str(cpt_trames)+"\n");
  138 + print("TEMPERATURE : "+str(temp_read)+" °C\n");
  139 + print("PUISSANCE : "+str(puissance_read)+" dBm\n");
  140 + print("PING : "+str(ping_mesured)+" ms\n");
  141 + np.round(pred,0);
  142 + if(pred==1):
  143 + print("TRAFIC : DANGER\n");
  144 + elif(pred==0):
  145 + print("TRAFIC : RAS\n");
  146 + print("###############################\n");
  147 +
  148 + cpt_trames_temp = cpt_trames;
143 149 ###############################################################################
144 150  
145 151 ###############################################################################
... ...