Kowo commited on
Update app.py
Browse files
app.py
CHANGED
|
@@ -4,21 +4,10 @@ import matplotlib.pyplot as plt
|
|
| 4 |
import time
|
| 5 |
import numpy as np
|
| 6 |
import seaborn as sns
|
| 7 |
-
from streamlit_extras.colored_header import colored_header
|
| 8 |
-
from streamlit_extras.card import card
|
| 9 |
-
from streamlit_extras.badges import badge
|
| 10 |
-
from streamlit_extras.metric_cards import style_metric_cards
|
| 11 |
-
from streamlit_extras.dataframe_explorer import dataframe_explorer ,generate_fake_dataframe
|
| 12 |
-
from streamlit_extras.mention import mention
|
| 13 |
-
from streamlit_extras.chart_container import chart_container
|
| 14 |
-
from streamlit_extras.grid import grid
|
| 15 |
-
from streamlit_extras.row import row
|
| 16 |
import tensorflow as tf
|
| 17 |
-
|
| 18 |
-
from io import StringIO
|
| 19 |
import os
|
| 20 |
|
| 21 |
-
|
| 22 |
# Constants
|
| 23 |
APP_TITLE = "SAVE_ME"
|
| 24 |
APP_LOGO = "matrix-hacker-background.jpg"
|
|
@@ -26,52 +15,32 @@ FEEDBACK_FILE = 'predictions_feedback.csv'
|
|
| 26 |
DESCRIPTION = """
|
| 27 |
<h2 style='color: #7D7D7D;'>Système de Détection d'Intrusion Basé sur l'Apprentissage Profond</h2>
|
| 28 |
<p>Dans un monde numérique en constante évolution, les menaces en ligne deviennent de plus en plus sophistiquées. Les systèmes de détection d'intrusion traditionnels peuvent ne pas suffire pour contrer ces attaques avancées. C'est pourquoi nous avons développé un système de détection d'intrusion (IDS) <strong>révolutionnaire</strong> basé sur l'apprentissage profond, offrant une sécurité renforcée et une détection précise des anomalies.</p>
|
| 29 |
-
<p>L'apprentissage profond est une branche de l'intelligence artificielle qui utilise des réseaux neuronaux artificiels pour analyser des données complexes. Contrairement aux méthodes de détection classiques, l'apprentissage profond permet à notre système d'identifier des modèles et des anomalies dans vos données de réseau avec une précision inégalée. Grâce à des algorithmes sophistiqués et à une formation sur des volumes massifs de données, notre IDS peut détecter des comportements suspects et des attaques potentiellement dangereuses que d'autres systèmes pourraient manquer.</p>
|
| 30 |
"""
|
| 31 |
parameters = {
|
| 32 |
"Action": {
|
| 33 |
-
"description": ""
|
| 34 |
-
**Description:** C'est la décision finale de votre modèle, indiquant s'il considère le trafic comme une intrusion ou non.
|
| 35 |
-
**Valeurs possibles:** 'Intrusion' ou 'Non Intrusion'.
|
| 36 |
-
**Rôle:** Ce paramètre est crucial car il représente la sortie du modèle après toutes les analyses.
|
| 37 |
-
""",
|
| 38 |
"image": "hackers-film-ddos-attack-threat-video.jpg"
|
| 39 |
},
|
| 40 |
"Bytes Sent": {
|
| 41 |
-
"description": ""
|
| 42 |
-
**Description:** Nombre total d'octets envoyés par l'entité au cours de la connexion.
|
| 43 |
-
**Rôle:** Permet d'évaluer la quantité de données envoyées et peut être un indicateur du comportement du réseau.
|
| 44 |
-
""",
|
| 45 |
"image": "blue-optic-fiber-with-ethernet-cables.jpg"
|
| 46 |
},
|
| 47 |
"Bytes Received": {
|
| 48 |
-
"description": ""
|
| 49 |
-
**Description:** Nombre total d'octets reçus par l'entité au cours de la connexion.
|
| 50 |
-
**Rôle:** Comme pour les octets envoyés, ce paramètre aide à comprendre la quantité de données reçues et peut signaler des anomalies.
|
| 51 |
-
""",
|
| 52 |
"image": "computer-hacker-hooded-shirt-typing-software-algorithms-stealing-data-from-computer-network-laptop.jpg"
|
| 53 |
}
|
| 54 |
}
|
| 55 |
params = {
|
| 56 |
"pkts_sent": {
|
| 57 |
-
"description": ""
|
| 58 |
-
**Description:** Nombre total de paquets envoyés durant la connexion.
|
| 59 |
-
**Rôle:** Le volume de paquets envoyés peut aider à identifier les comportements suspects ou anormaux.
|
| 60 |
-
""",
|
| 61 |
"image": "password-with-hand-holding-tweezers-binary-code.jpg"
|
| 62 |
},
|
| 63 |
"pkts_received": {
|
| 64 |
-
"description": ""
|
| 65 |
-
**Description:** Nombre total de paquets reçus durant la connexion.
|
| 66 |
-
**Rôle:** Comme pour les paquets envoyés, ce paramètre est important pour détecter les anomalies en fonction du volume des données reçues.
|
| 67 |
-
""",
|
| 68 |
"image": "hackers-film-ddos-attack-threat-video.jpg"
|
| 69 |
},
|
| 70 |
"Elapsed Time (sec)": {
|
| 71 |
-
"description": ""
|
| 72 |
-
**Description:** Temps écoulé en secondes durant la connexion ou l'événement observé.
|
| 73 |
-
**Rôle:** Mesure la durée de l'activité, utile pour détecter les anomalies temporelles.
|
| 74 |
-
""",
|
| 75 |
"image": "html-css-collage-concept-with-hacker.jpg"
|
| 76 |
}
|
| 77 |
}
|
|
@@ -170,7 +139,7 @@ if chooseMenu == MenuNavigation[0]:
|
|
| 170 |
""", unsafe_allow_html=True)
|
| 171 |
|
| 172 |
elif chooseMenu == MenuNavigation[1]:
|
| 173 |
-
col1, col2, col3, col4
|
| 174 |
sumByte = np.sum(DATA["Bytes Sent"]) + np.sum(DATA["Bytes Received"])
|
| 175 |
col1.metric(label="Nombre De Données", value=DATA.shape[0], delta=5000)
|
| 176 |
col2.metric(label="Nombre Moyens de Paquets ", value=int((DATA.pkts_sent.sum() + DATA.pkts_received.sum()) / DATA.shape[0]), delta=100)
|
|
@@ -220,21 +189,25 @@ elif chooseMenu == MenuNavigation[3]:
|
|
| 220 |
|
| 221 |
if not existing_feedback.empty:
|
| 222 |
st.write("Cette situation a déjà été rencontrée.")
|
| 223 |
-
st.write(f"Action
|
|
|
|
|
|
|
| 224 |
else:
|
| 225 |
st.write("Prédiction du Modèle: " + data_Input["Model Prediction"].values[0])
|
| 226 |
|
| 227 |
user_correction = st.selectbox("Cette prédiction est-elle correcte?", ["Oui", "Non"])
|
| 228 |
-
|
| 229 |
if user_correction == "Non":
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
|
|
|
| 239 |
|
| 240 |
st.dataframe(data_Input, use_container_width=True)
|
|
|
|
|
|
| 4 |
import time
|
| 5 |
import numpy as np
|
| 6 |
import seaborn as sns
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
import tensorflow as tf
|
| 8 |
+
from streamlit_extras.dataframe_explorer import dataframe_explorer
|
|
|
|
| 9 |
import os
|
| 10 |
|
|
|
|
| 11 |
# Constants
|
| 12 |
APP_TITLE = "SAVE_ME"
|
| 13 |
APP_LOGO = "matrix-hacker-background.jpg"
|
|
|
|
| 15 |
DESCRIPTION = """
|
| 16 |
<h2 style='color: #7D7D7D;'>Système de Détection d'Intrusion Basé sur l'Apprentissage Profond</h2>
|
| 17 |
<p>Dans un monde numérique en constante évolution, les menaces en ligne deviennent de plus en plus sophistiquées. Les systèmes de détection d'intrusion traditionnels peuvent ne pas suffire pour contrer ces attaques avancées. C'est pourquoi nous avons développé un système de détection d'intrusion (IDS) <strong>révolutionnaire</strong> basé sur l'apprentissage profond, offrant une sécurité renforcée et une détection précise des anomalies.</p>
|
|
|
|
| 18 |
"""
|
| 19 |
parameters = {
|
| 20 |
"Action": {
|
| 21 |
+
"description": "C'est la décision finale de votre modèle, indiquant s'il considère le trafic comme une intrusion ou non. Valeurs possibles: 'Intrusion' ou 'Non Intrusion'.",
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
"image": "hackers-film-ddos-attack-threat-video.jpg"
|
| 23 |
},
|
| 24 |
"Bytes Sent": {
|
| 25 |
+
"description": "Nombre total d'octets envoyés par l'entité au cours de la connexion.",
|
|
|
|
|
|
|
|
|
|
| 26 |
"image": "blue-optic-fiber-with-ethernet-cables.jpg"
|
| 27 |
},
|
| 28 |
"Bytes Received": {
|
| 29 |
+
"description": "Nombre total d'octets reçus par l'entité au cours de la connexion.",
|
|
|
|
|
|
|
|
|
|
| 30 |
"image": "computer-hacker-hooded-shirt-typing-software-algorithms-stealing-data-from-computer-network-laptop.jpg"
|
| 31 |
}
|
| 32 |
}
|
| 33 |
params = {
|
| 34 |
"pkts_sent": {
|
| 35 |
+
"description": "Nombre total de paquets envoyés durant la connexion.",
|
|
|
|
|
|
|
|
|
|
| 36 |
"image": "password-with-hand-holding-tweezers-binary-code.jpg"
|
| 37 |
},
|
| 38 |
"pkts_received": {
|
| 39 |
+
"description": "Nombre total de paquets reçus durant la connexion.",
|
|
|
|
|
|
|
|
|
|
| 40 |
"image": "hackers-film-ddos-attack-threat-video.jpg"
|
| 41 |
},
|
| 42 |
"Elapsed Time (sec)": {
|
| 43 |
+
"description": "Temps écoulé en secondes durant la connexion ou l'événement observé.",
|
|
|
|
|
|
|
|
|
|
| 44 |
"image": "html-css-collage-concept-with-hacker.jpg"
|
| 45 |
}
|
| 46 |
}
|
|
|
|
| 139 |
""", unsafe_allow_html=True)
|
| 140 |
|
| 141 |
elif chooseMenu == MenuNavigation[1]:
|
| 142 |
+
col1, col2, col3, col4, col5 = st.columns(5)
|
| 143 |
sumByte = np.sum(DATA["Bytes Sent"]) + np.sum(DATA["Bytes Received"])
|
| 144 |
col1.metric(label="Nombre De Données", value=DATA.shape[0], delta=5000)
|
| 145 |
col2.metric(label="Nombre Moyens de Paquets ", value=int((DATA.pkts_sent.sum() + DATA.pkts_received.sum()) / DATA.shape[0]), delta=100)
|
|
|
|
| 189 |
|
| 190 |
if not existing_feedback.empty:
|
| 191 |
st.write("Cette situation a déjà été rencontrée.")
|
| 192 |
+
st.write(f"Action Prédite: {existing_feedback['Model Prediction'].values[0]}")
|
| 193 |
+
st.write(f"Action corrigée par l'utilisateur : {existing_feedback['User Correction'].values[0]}")
|
| 194 |
+
|
| 195 |
else:
|
| 196 |
st.write("Prédiction du Modèle: " + data_Input["Model Prediction"].values[0])
|
| 197 |
|
| 198 |
user_correction = st.selectbox("Cette prédiction est-elle correcte?", ["Oui", "Non"])
|
| 199 |
+
corrected_action=""
|
| 200 |
if user_correction == "Non":
|
| 201 |
+
# Set corrected_action to the inverse of the prediction
|
| 202 |
+
if data_Input["Model Prediction"].values[0] == "Intrusion":
|
| 203 |
+
corrected_action = "No Intrusion"
|
| 204 |
+
else:
|
| 205 |
+
corrected_action = "Intrusion"
|
| 206 |
+
feedback_entry = data_Input.copy()
|
| 207 |
+
feedback_entry["User Correction"] = corrected_action
|
| 208 |
+
feedback_entry["Model Prediction"] = data_Input["Model Prediction"].values[0] # Keep original prediction
|
| 209 |
+
save_feedback(feedback_entry)
|
| 210 |
+
|
| 211 |
|
| 212 |
st.dataframe(data_Input, use_container_width=True)
|
| 213 |
+
|