ad076126
rcavalie
Début KPPV pour ping
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
"""
Created on Thu Jan 11 15:22:56 2018
@author: Robin Cavalieri
IMA5SC - PFE 2018
P32 - Détection automatique de DoS sur réseau LoRa
Main avec méthode des KPPV
"""
###############################################################################
#LIBRAIRIES UTILES
###############################################################################
import time;
import serial;
import numpy as np;
import pandas as pd;
###############################################################################
|
c6f368e9
rcavalie
kppv runs
|
17
18
19
20
21
22
23
24
25
26
27
|
###############################################################################
#VARIABLES MESUREES
###############################################################################
ping_mesured=0;
rssi_mesured=0;
result=0;
puissance_read = 0;
temp_read = 0;
trame_read = [];
###############################################################################
|
ad076126
rcavalie
Début KPPV pour ping
|
28
29
30
31
32
33
34
35
|
##############################################################################
#DEFINITION DE LA LECTURE DE PORT
##############################################################################
ser = serial.Serial(
#Pour Linux
#port='/dev/ttyACM0',
#Pour Windows
port='COM4',
|
b7c4ad3b
rcavalie
With webapp
|
36
|
#Vitesse4de communication
|
ad076126
rcavalie
Début KPPV pour ping
|
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
baudrate = 9600,
#Parité
parity=serial.PARITY_NONE,
#Bit de stop
stopbits=serial.STOPBITS_ONE,
#Taille du message
bytesize=serial.EIGHTBITS,
#Out
timeout=1
)
counter=0;
##############################################################################
###############################################################################
#TRAVAIL PRELIMINAIRE DE TRAITEMENT DES DONNEES D'APPRENTISSAGE
###############################################################################
# Ouverture des bases d'apprentissage
dataset_ping_norm = pd.read_csv('C:/Users/Utilisateur/PFE/python/datasets/ping_norm.csv');
dataset_ping_attack = pd.read_csv('C:/Users/Utilisateur/PFE/python/datasets/ping_attack.csv');
dataset_rssi_norm = pd.read_csv('C:/Users/Utilisateur/PFE/python/datasets/rssi_norm.csv');
dataset_rssi_attack = pd.read_csv('C:/Users/Utilisateur/PFE/python/datasets/rssi_attack.csv');
#Concatenation pour avoir une base de ping et une base de rssi
dataset_ping = np.concatenate((dataset_ping_attack, dataset_ping_norm), axis=0);
dataset_rssi = np.concatenate((dataset_rssi_attack, dataset_rssi_norm), axis=0);
#Récupération des tailles de matrices
[X_ping, Y_ping] = np.shape(dataset_ping);
[X_rssi, Y_rssi] = np.shape(dataset_rssi);
###############################################################################
###############################################################################
#KPPV PING
###############################################################################
def prediction_ping(ping):
|
ad076126
rcavalie
Début KPPV pour ping
|
72
73
|
cpt = 0;
k = 5;
|
c6f368e9
rcavalie
kppv runs
|
74
|
dataset_ping_temp = np.zeros((X_ping,1));
|
ad076126
rcavalie
Début KPPV pour ping
|
75
|
#Remplissage des distances euclidiennes
|
c6f368e9
rcavalie
kppv runs
|
76
77
|
for i in range(0, X_ping):
dataset_ping_temp[i,0] = ((dataset_ping[i,1]-ping)**2)**0.5;
|
ad076126
rcavalie
Début KPPV pour ping
|
78
79
80
|
#Concatenation avec distances euclidiennes
dataset_ping_temp = np.c_[dataset_ping, dataset_ping_temp];
#Tri
|
c6f368e9
rcavalie
kppv runs
|
81
|
dataset_ping_temp = dataset_ping_temp[dataset_ping_temp[:,2].argsort()]
|
ad076126
rcavalie
Début KPPV pour ping
|
82
|
#Checking des k premiers voisins
|
ad076126
rcavalie
Début KPPV pour ping
|
83
|
for j in range(0, k-1):
|
c6f368e9
rcavalie
kppv runs
|
84
85
|
if(dataset_ping_temp[j,0]==1):
cpt = cpt+1;
|
ad076126
rcavalie
Début KPPV pour ping
|
86
87
88
89
|
if(cpt >= (k/2)+1):
return 1; #Attaque
else:
return 0; #RAS
|
c6f368e9
rcavalie
kppv runs
|
90
91
92
93
94
95
96
|
###############################################################################
###############################################################################
#KPPV RSSI
###############################################################################
def prediction_rssi(rssi):
cpt = 0;
|
b7c4ad3b
rcavalie
With webapp
|
97
|
k = 20;
|
c6f368e9
rcavalie
kppv runs
|
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
dataset_rssi_temp = np.zeros((X_rssi,1));
#Remplissage des distances euclidiennes
for i in range(0, X_rssi):
dataset_rssi_temp[i,0] = ((dataset_rssi[i,1]-rssi)**2)**0.5;
#Concatenation avec distances euclidiennes
dataset_rssi_temp = np.c_[dataset_rssi, dataset_rssi_temp];
#Tri
dataset_rssi_temp = dataset_rssi_temp[dataset_rssi_temp[:,2].argsort()]
#Checking des k premiers voisins
for j in range(0, k-1):
if(dataset_rssi_temp[j,0]==1):
cpt = cpt+1;
if(cpt >= (k/2)+1):
return 1; #Attaque
else:
return 0; #RAS
###############################################################################
|
ad076126
rcavalie
Début KPPV pour ping
|
116
117
118
119
120
121
122
123
124
125
|
###############################################################################
#AFFICHAGE
###############################################################################
def Recorder():
global temp;
global temp_read;
global ping_mesured;
global puissance_read;
global trame_read;
global cpt_trames;
|
c6f368e9
rcavalie
kppv runs
|
126
127
128
|
global cpt_trames_temp;
cpt_trames = 0;
cpt_trames_temp = 0;
|
dbae34b1
rcavalie
début de l'applic...
|
129
130
131
132
133
134
|
temp = 0;
#REMISE A 0 DES FICHIERS
temp_file = open('C:/xampp/htdocs/temperature.csv', 'w')
ping_file = open('C:/xampp/htdocs/ping.csv', 'w')
puissance_file = open('C:/xampp/htdocs/puissance.csv', 'w')
import csv
|
ad076126
rcavalie
Début KPPV pour ping
|
135
136
137
138
|
while(1):
#RECUPERATION DES DONNEES
x = ser.readline();
|
dbae34b1
rcavalie
début de l'applic...
|
139
140
141
142
143
144
145
146
147
148
|
#FICHIERS CSV APPLICATION WEB
temp_file = open('C:/xampp/htdocs/temperature.csv', 'a')
tempwriter = csv.writer(temp_file, delimiter=',');
ping_file = open('C:/xampp/htdocs/ping.csv', 'a')
pingwriter = csv.writer(ping_file, delimiter=',');
puissance_file = open('C:/xampp/htdocs/puissance.csv', 'a')
puissancewriter = csv.writer(puissance_file, delimiter=',');
|
24561928
rcavalie
application et pr...
|
149
150
151
152
153
154
|
traficping_file = open('C:/xampp/htdocs/traficPing.csv', 'w')
traficpingwriter = csv.writer(traficping_file);
traficrssi_file = open('C:/xampp/htdocs/traficRssi.csv', 'w')
traficrssiwriter = csv.writer(traficrssi_file);
|
ad076126
rcavalie
Début KPPV pour ping
|
155
156
157
158
159
|
if(0x7C in x):
#Lecture de la trame
trame_read = x;
#Récupération du compteur de trames
cpt_trames = (trame_read[15]-48)*100 + (trame_read[16]-48)*10 + (trame_read[17]-48);
|
ad076126
rcavalie
Début KPPV pour ping
|
160
|
|
dbae34b1
rcavalie
début de l'applic...
|
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
|
if(0x7C in x and cpt_trames == 1):
temp = time.time();
if(0x7C in x and cpt_trames > 1):
t2 = time.time();
ping_mesured = (t2-temp)*1000;
#Récupération de la température
temp_read = (trame_read[12]-48)*10 + trame_read[13]-48;
#Récupération de la puissance
x = ser.readline();
puissance_read = (x[1]-48)*10 + x[2]-48;
#T2
temp = t2;
if(cpt_trames_temp + 1 == cpt_trames):
#BOOLEEN
state_ping = prediction_ping(ping_mesured);
state_rssi = prediction_rssi(puissance_read);
#AFFICHAGE
print("\n###############################\n");
print("TRAME : "+ "".join(map(chr, trame_read))+"\n");
print("TRAME NUM. : "+str(cpt_trames)+"\n");
print("TEMPERATURE : "+str(temp_read)+" °C\n");
print("PUISSANCE : "+str(puissance_read)+" dBm\n");
print("PING : "+str(ping_mesured)+" ms\n");
if(state_ping == 0):
print("PING NORMAL\n");
|
24561928
rcavalie
application et pr...
|
188
|
traficpingwriter.writerow([0])
|
dbae34b1
rcavalie
début de l'applic...
|
189
190
|
elif(state_ping == 1):
print("PING ATTAQUE\n");
|
24561928
rcavalie
application et pr...
|
191
|
traficpingwriter.writerow([1])
|
dbae34b1
rcavalie
début de l'applic...
|
192
193
|
if(state_rssi == 0):
print("RSSI NORMAL\n");
|
24561928
rcavalie
application et pr...
|
194
|
traficrssiwriter.writerow([0])
|
dbae34b1
rcavalie
début de l'applic...
|
195
196
|
elif(state_rssi == 1):
print("RSSI ATTAQUE\n");
|
24561928
rcavalie
application et pr...
|
197
|
traficrssiwriter.writerow([1])
|
dbae34b1
rcavalie
début de l'applic...
|
198
199
200
201
202
203
|
print("###############################\n");
##########################################
#ECRITURE DANS FICHIERS
##########################################
tempwriter.writerow([time.time(),temp_read]);
pingwriter.writerow([time.time(),ping_mesured])
|
24561928
rcavalie
application et pr...
|
204
|
puissancewriter.writerow([time.time(),puissance_read]);
|
dbae34b1
rcavalie
début de l'applic...
|
205
206
207
208
209
210
211
212
|
##########################################
else:
print("\n###############################\n");
print("ON AIR");
print("\n###############################\n");
temp_file.close();
puissance_file.close();
ping_file.close();
|
24561928
rcavalie
application et pr...
|
213
214
|
traficping_file.close();
traficrssi_file.close();
|
dbae34b1
rcavalie
début de l'applic...
|
215
|
cpt_trames_temp = cpt_trames;
|
ad076126
rcavalie
Début KPPV pour ping
|
216
217
218
219
220
221
222
223
|
###############################################################################
###############################################################################
#MAIN
###############################################################################
if __name__ == '__main__':
Recorder();
###############################################################################
|