hnuka commited on
Commit
49a80d1
·
1 Parent(s): a9ac487

first commit

Browse files
Files changed (3) hide show
  1. app.py +78 -0
  2. model_cb2.pkl +3 -0
  3. 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