Project ini adalah:
Web-based Intrusion Detection System (IDS) Menggunakan Machine Learning untuk mendeteksi apakah traffic network adalah NORMAL atau ATTACK.
Sistem terdiri dari:
- Frontend (React + Vite + TypeScript)
- Backend (FastAPI)
- Machine Learning Model (scikit-learn)
- Database (SQLAlchemy + SQLite/PostgreSQL)
User dapat:
-
Input parameter network traffic
-
Klik "Test Detect"
-
Backend memproses data menggunakan ML model
-
Sistem mengembalikan:
- prediction (0/1)
- result (NORMAL / ATTACK)
- attack_type
- confidence
-
Data disimpan ke database (detection_log)
-
Framework: React + Vite
-
File penting:
DetectForm.tsxidsService.ts
Flow:
User → Form → axios POST → http://127.0.0.1:8000/detect
Framework: FastAPI
File penting:
main.pyroutes/detect.pyschemas/ids_schema.pymodels/detection_log.pydatabase/db.py
POST http://127.0.0.1:8000/detect
Content-Type: application/json
Body JSON harus mengikuti schema IDSInput.
@router.post("/detect")
def detect(data: IDSInput):FastAPI otomatis:
- Validasi JSON sesuai Pydantic model
- Jika tidak sesuai → 422
Flow di backend:
- Convert input ke dict
- Convert ke pandas DataFrame
- One-hot encoding
- Align kolom dengan
model.feature_names_in_ model.predict()model.predict_proba()- Save ke database
- Return response JSON
Model:
-
Sudah dilatih sebelumnya
-
Memiliki:
model.feature_names_in_model.classes_predict()predict_proba()
Preprocessing:
df = pd.get_dummies(df)
df = df.reindex(columns=model_features, fill_value=0)Ini untuk memastikan fitur sesuai dengan saat training.
Menggunakan SQLAlchemy.
Setiap prediksi akan disimpan:
log_entry = DetectionLog(
duration=data.duration,
protocol=data.protocol_type,
service=data.service,
flag=data.flag,
result=result,
attack_type=attack_type,
confidence=confidence
)422 Unprocessable Entity
Artinya:
FastAPI menolak request sebelum masuk ke logic karena JSON tidak sesuai dengan schema IDSInput.
Kemungkinan penyebab:
- Frontend tidak mengirim semua field
- Nama field tidak sama
- Tipe data tidak sesuai
- Content-Type salah
Schema memiliki ±41 fitur network (dataset KDD99 style):
Contoh:
duration
protocol_type
service
flag
src_bytes
dst_bytes
...
dst_host_srv_rerror_rate
Semua sudah diberi default value supaya tidak wajib dikirim.
AI perlu memeriksa:
- Apakah field name cocok?
- Apakah tipe data cocok?
- Apakah axios mengirim Content-Type application/json?
Mismatch bisa menyebabkan error 400 di backend.
- Cek request payload dari frontend
- Cek Network tab di browser
- Cek schema Pydantic
- Test endpoint via Swagger
/docs - Logging request body sebelum validation
- Print
model.feature_names_in_
- Development environment
- CORS allow all origins
- Localhost only
- Model harus sudah load saat startup
- Database auto create on startup
Backend harus mengembalikan:
{
"prediction": 1,
"result": "ATTACK",
"attack_type": "neptune",
"confidence": 0.97
}AI bisa bantu:
- Refactor schema jadi lebih modular
- Tambah validation constraint
- Tambah error logging detail
- Improve frontend form auto-generate
- Tambah feature scaling pipeline
- Bungkus preprocessing ke sklearn Pipeline
- Tambah monitoring dashboard
Project ini adalah web-based ML Intrusion Detection System menggunakan React frontend dan FastAPI backend. Frontend mengirim JSON berisi 41 fitur network ke endpoint /detect. Backend memvalidasi menggunakan Pydantic schema IDSInput, melakukan preprocessing (one-hot encoding + feature alignment), menjalankan model scikit-learn untuk prediksi, menyimpan hasil ke database via SQLAlchemy, dan mengembalikan hasil ke frontend. Saat ini terjadi error 422 karena mismatch antara request body frontend dan schema backend.