Commit ad076126db864abf2110f376fe89af50d75eea60
1 parent
1eb4c27f
Début KPPV pour ping
Showing
2 changed files
with
164 additions
and
23 deletions
Show diff stats
... | ... | @@ -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 | ############################################################################### | ... | ... |