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
36
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
|
##############################################################################
#DEFINITION DE LA LECTURE DE PORT
##############################################################################
ser = serial.Serial(
#Pour Linux
#port='/dev/ttyACM0',
#Pour Windows
port='COM4',
#Vitesse de communication
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
|
c6f368e9
rcavalie
kppv runs
|
83
|
print(dataset_ping_temp);
|
ad076126
rcavalie
Début KPPV pour ping
|
84
|
for j in range(0, k-1):
|
c6f368e9
rcavalie
kppv runs
|
85
86
|
if(dataset_ping_temp[j,0]==1):
cpt = cpt+1;
|
ad076126
rcavalie
Début KPPV pour ping
|
87
88
89
90
|
if(cpt >= (k/2)+1):
return 1; #Attaque
else:
return 0; #RAS
|
c6f368e9
rcavalie
kppv runs
|
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
###############################################################################
###############################################################################
#KPPV RSSI
###############################################################################
def prediction_rssi(rssi):
cpt = 0;
k = 5;
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
|
117
118
119
120
121
122
123
124
125
126
|
###############################################################################
#AFFICHAGE
###############################################################################
def Recorder():
global temp;
global temp_read;
global ping_mesured;
global puissance_read;
global trame_read;
global cpt_trames;
|
c6f368e9
rcavalie
kppv runs
|
127
128
129
130
|
global cpt_trames_temp;
cpt_trames = 0;
cpt_trames_temp = 0;
|
ad076126
rcavalie
Début KPPV pour ping
|
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
while(1):
#RECUPERATION DES DONNEES
x = ser.readline();
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);
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;
|
c6f368e9
rcavalie
kppv runs
|
155
156
157
158
|
if(cpt_trames_temp + 1 == cpt_trames):
#BOOLEEN
state_ping = prediction_ping(ping_mesured);
state_rssi = prediction_rssi(puissance_read);
|
ad076126
rcavalie
Début KPPV pour ping
|
159
160
161
162
163
164
165
|
#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");
|
c6f368e9
rcavalie
kppv runs
|
166
167
168
169
170
171
172
173
|
if(state_ping == 0):
print("PING NORMAL\n");
elif(state_ping == 1):
print("PING ATTAQUE\n");
if(state_rssi == 0):
print("RSSI NORMAL\n");
elif(state_rssi == 1):
print("RSSI ATTAQUE\n");
|
ad076126
rcavalie
Début KPPV pour ping
|
174
175
176
177
178
179
180
181
182
183
184
|
print("###############################\n");
cpt_trames_temp = cpt_trames;
###############################################################################
###############################################################################
#MAIN
###############################################################################
if __name__ == '__main__':
Recorder();
###############################################################################
|