Views
No views yet
1import joblib, json, numpy as np, pandas as pd, re
2from urllib.parse import urlparse
3
4rf = joblib.load("rf_model.pkl")
5xgb = joblib.load("xgb_model.pkl")
6scaler = joblib.load("scaler.pkl")
7selector = joblib.load("selector.pkl")
8
9def extract_url_features(url):
10 return {
11 "URLLength": len(url), "DomainLength": len(urlparse(url).netloc),
12 "HasAtSymbol": 1 if "@" in url else 0, "HasHyphen": 1 if "-" in url else 0,
13 "HasHTTPS": 1 if url.startswith("https") else 0, "NumDots": url.count("."),
14 "NumSlashes": url.count("/"), "HasIP": 1 if re.search(r"\d+\.\d+\.\d+\.\d+", url) else 0
15 }
16
17def predict(url):
18 features = pd.DataFrame([extract_url_features(url)])
19 scaled = scaler.transform(features)
20 selected = selector.transform(scaled)
21 prob = (rf.predict_proba(selected)[:,1] + xgb.predict_proba(selected)[:,1]) / 2
22 return "Phishing" if prob[0] > 0.5 else "Legitimate"