Spaces:
Build error
Build error
first commit
Browse files- app.py +78 -0
- model_cb2.pkl +3 -0
- requirements.txt +4 -0
app.py
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import numpy as np
|
| 2 |
+
import pandas as pd
|
| 3 |
+
from sklearn.preprocessing import StandardScaler
|
| 4 |
+
import joblib
|
| 5 |
+
import gradio as gr
|
| 6 |
+
|
| 7 |
+
# Load model IDS
|
| 8 |
+
model = joblib.load("model_cb2.pkl")
|
| 9 |
+
|
| 10 |
+
# Label mapping
|
| 11 |
+
LABEL_CLASS = {
|
| 12 |
+
0: "Benign",
|
| 13 |
+
1: "Bot",
|
| 14 |
+
2: "DDOS attack-HOIC",
|
| 15 |
+
3: "DDOS attack-LOIC-UDP",
|
| 16 |
+
4: "DDoS attacks-LOIC-HTTP",
|
| 17 |
+
5: "DoS attacks-GoldenEye",
|
| 18 |
+
6: "DoS attacks-Hulk",
|
| 19 |
+
7: "DoS attacks-Slowloris",
|
| 20 |
+
8: "Infilteration",
|
| 21 |
+
9: "SSH-Bruteforce"
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
def preprocess_data(df_all):
|
| 25 |
+
# Hapus kolom tidak penting
|
| 26 |
+
df_all.drop(columns=['Unnamed: 0', 'Timestamp'], inplace=True, errors='ignore')
|
| 27 |
+
|
| 28 |
+
# Ganti inf dengan NaN
|
| 29 |
+
df_all['Flow Byts/s'].replace([np.inf, -np.inf], np.nan, inplace=True)
|
| 30 |
+
df_all['Flow Pkts/s'].replace([np.inf, -np.inf], np.nan, inplace=True)
|
| 31 |
+
|
| 32 |
+
# Isi NaN
|
| 33 |
+
df_all['Flow Byts/s'].fillna(df_all['Flow Byts/s'].median(), inplace=True)
|
| 34 |
+
df_all['Flow Pkts/s'].fillna(df_all['Fwd Pkts/s'] + df_all['Bwd Pkts/s'], inplace=True)
|
| 35 |
+
|
| 36 |
+
# Normalisasi
|
| 37 |
+
df_all = df_all[['Fwd Seg Size Min', 'Bwd IAT Tot', 'Bwd IAT Max', 'Bwd IAT Std',
|
| 38 |
+
'Bwd IAT Mean', 'PSH Flag Cnt', 'Bwd Pkt Len Min', 'Flow IAT Std',
|
| 39 |
+
'Flow IAT Max', 'Fwd IAT Std', 'Fwd IAT Max', 'Idle Max', 'Idle Mean',
|
| 40 |
+
'Bwd IAT Min', 'Bwd Pkt Len Max', 'Idle Min', 'Bwd Pkts/s',
|
| 41 |
+
'Flow Pkts/s', 'Bwd Seg Size Avg', 'Bwd Pkt Len Mean', 'Fwd PSH Flags',
|
| 42 |
+
'SYN Flag Cnt', 'Pkt Len Max', 'Fwd Pkt Len Min', 'Pkt Len Min',
|
| 43 |
+
'ACK Flag Cnt', 'Init Bwd Win Byts', 'Fwd Header Len',
|
| 44 |
+
'TotLen Fwd Pkts', 'Subflow Fwd Byts', 'Subflow Fwd Pkts',
|
| 45 |
+
'Tot Fwd Pkts', 'Fwd Act Data Pkts', 'Dst Port', 'ECE Flag Cnt',
|
| 46 |
+
'RST Flag Cnt']]
|
| 47 |
+
# scaler = StandardScaler()
|
| 48 |
+
# df_all[df_all.columns] = scaler.fit_transform(df_all[df_all.columns])
|
| 49 |
+
|
| 50 |
+
return df_all
|
| 51 |
+
|
| 52 |
+
def predict_ids(file):
|
| 53 |
+
try:
|
| 54 |
+
df_all = pd.read_csv(file.name)
|
| 55 |
+
df_processed = preprocess_data(df_all)
|
| 56 |
+
pred_indices = model.predict(df_processed)
|
| 57 |
+
|
| 58 |
+
# Buat DataFrame hasil
|
| 59 |
+
hasil = pd.DataFrame({
|
| 60 |
+
"Index": range(len(pred_indices)),
|
| 61 |
+
"Predicted Label": [LABEL_CLASS[i] for i in pred_indices.flatten()]
|
| 62 |
+
})
|
| 63 |
+
|
| 64 |
+
return hasil
|
| 65 |
+
except Exception as e:
|
| 66 |
+
return f"Terjadi error saat memproses file: {str(e)}"
|
| 67 |
+
|
| 68 |
+
# Gradio UI
|
| 69 |
+
demo = gr.Interface(
|
| 70 |
+
fn=predict_ids,
|
| 71 |
+
inputs=gr.File(label="Upload CSV File", file_types=[".csv"]),
|
| 72 |
+
outputs=gr.Dataframe(label="Hasil Prediksi (Index dan Label)"),
|
| 73 |
+
title="Predicting IDS",
|
| 74 |
+
description="Upload file CSV untuk memprediksi jenis aktivitas jaringan (Benign, BruteForce, dll)"
|
| 75 |
+
)
|
| 76 |
+
|
| 77 |
+
if __name__ == "__main__":
|
| 78 |
+
demo.launch()
|
model_cb2.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e7ad78f7c3991dd6b0aeaddc6284d6bb6c6679aa30731d312508f646b114f519
|
| 3 |
+
size 5734275
|
requirements.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
numpy==2.2.4
|
| 2 |
+
pandas==2.2.3
|
| 3 |
+
joblib==1.4.2
|
| 4 |
+
scikit-learn==1.6.1
|