Spaces:
Build error
Build error
| import numpy as np | |
| import pandas as pd | |
| from sklearn.preprocessing import StandardScaler | |
| import joblib | |
| import gradio as gr | |
| # Load model IDS | |
| model = joblib.load("model_cb2.pkl") | |
| # Label mapping | |
| LABEL_CLASS = { | |
| 0: "Benign", | |
| 1: "Bot", | |
| 2: "DDOS attack-HOIC", | |
| 3: "DDOS attack-LOIC-UDP", | |
| 4: "DDoS attacks-LOIC-HTTP", | |
| 5: "DoS attacks-GoldenEye", | |
| 6: "DoS attacks-Hulk", | |
| 7: "DoS attacks-Slowloris", | |
| 8: "Infilteration", | |
| 9: "SSH-Bruteforce" | |
| } | |
| def preprocess_data(df_all): | |
| # Hapus kolom tidak penting | |
| df_all.drop(columns=['Unnamed: 0', 'Timestamp'], inplace=True, errors='ignore') | |
| # Ganti inf dengan NaN | |
| df_all['Flow Byts/s'].replace([np.inf, -np.inf], np.nan, inplace=True) | |
| df_all['Flow Pkts/s'].replace([np.inf, -np.inf], np.nan, inplace=True) | |
| # Isi NaN | |
| df_all['Flow Byts/s'].fillna(df_all['Flow Byts/s'].median(), inplace=True) | |
| df_all['Flow Pkts/s'].fillna(df_all['Fwd Pkts/s'] + df_all['Bwd Pkts/s'], inplace=True) | |
| # Normalisasi | |
| df_all = df_all[['Fwd Seg Size Min', 'Bwd IAT Tot', 'Bwd IAT Max', 'Bwd IAT Std', | |
| 'Bwd IAT Mean', 'PSH Flag Cnt', 'Bwd Pkt Len Min', 'Flow IAT Std', | |
| 'Flow IAT Max', 'Fwd IAT Std', 'Fwd IAT Max', 'Idle Max', 'Idle Mean', | |
| 'Bwd IAT Min', 'Bwd Pkt Len Max', 'Idle Min', 'Bwd Pkts/s', | |
| 'Flow Pkts/s', 'Bwd Seg Size Avg', 'Bwd Pkt Len Mean', 'Fwd PSH Flags', | |
| 'SYN Flag Cnt', 'Pkt Len Max', 'Fwd Pkt Len Min', 'Pkt Len Min', | |
| 'ACK Flag Cnt', 'Init Bwd Win Byts', 'Fwd Header Len', | |
| 'TotLen Fwd Pkts', 'Subflow Fwd Byts', 'Subflow Fwd Pkts', | |
| 'Tot Fwd Pkts', 'Fwd Act Data Pkts', 'Dst Port', 'ECE Flag Cnt', | |
| 'RST Flag Cnt']] | |
| # scaler = StandardScaler() | |
| # df_all[df_all.columns] = scaler.fit_transform(df_all[df_all.columns]) | |
| return df_all | |
| def predict_ids(file): | |
| try: | |
| df_all = pd.read_csv(file.name) | |
| df_processed = preprocess_data(df_all) | |
| pred_indices = model.predict(df_processed) | |
| # Buat DataFrame hasil | |
| hasil = pd.DataFrame({ | |
| "Index": range(len(pred_indices)), | |
| "Predicted Label": [LABEL_CLASS[i] for i in pred_indices.flatten()] | |
| }) | |
| return hasil | |
| except Exception as e: | |
| return f"Terjadi error saat memproses file: {str(e)}" | |
| # Gradio UI | |
| demo = gr.Interface( | |
| fn=predict_ids, | |
| inputs=gr.File(label="Upload CSV File", file_types=[".csv"]), | |
| outputs=gr.Dataframe(label="Hasil Prediksi (Index dan Label)"), | |
| title="Predicting IDS", | |
| description="Upload file CSV untuk memprediksi jenis aktivitas jaringan (Benign, BruteForce, dll)" | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |