| import gradio as gr
|
| import joblib
|
| import pandas as pd
|
| import re
|
| import os
|
|
|
|
|
|
|
|
|
| def extract_features(url):
|
| features = {
|
| 'url_length': len(url),
|
| 'num_dots': url.count('.'),
|
| 'num_hyphens': url.count('-'),
|
| 'num_slash': url.count('/'),
|
| 'num_underscore': url.count('_'),
|
| 'num_digits': sum(c.isdigit() for c in url),
|
| 'has_https': 1 if url.startswith('https') else 0,
|
| 'has_ip': 1 if re.search(r'\d+\.\d+\.\d+\.\d+', url) else 0,
|
| 'num_suspicious': sum(1 for word in ['login','verify','secure','account','signin','auth']
|
| if word in url.lower()),
|
| 'num_at': url.count('@'),
|
| 'num_question': url.count('?'),
|
| 'num_equal': url.count('=')
|
| }
|
| return pd.DataFrame([features])
|
|
|
| def predict_url(url):
|
| if not url:
|
| return "⚠️ Enter a URL", ""
|
|
|
|
|
| model = joblib.load('malicious_url_detector.pkl')
|
| features = extract_features(url)
|
| pred = model.predict(features)[0]
|
| prob = model.predict_proba(features)[0]
|
|
|
| if pred == 1:
|
| return f"🚨 MALICIOUS\nConfidence: {prob[1]:.1%}", ""
|
| return f"✅ SAFE\nConfidence: {prob[0]:.1%}", ""
|
|
|
| interface = gr.Interface(
|
| fn=predict_url,
|
| inputs=gr.Textbox(label="Enter URL", placeholder="https://...", lines=2),
|
| outputs=gr.Textbox(label="Result", lines=3),
|
| title="🛡️ AI Malicious URL Detector",
|
| description="This AI model detects phishing and malicious URLs in real-time.",
|
| examples=[
|
| ["https://google.com"],
|
| ["https://paypal.com.login.verify.secure.com"],
|
| ["https://github.com"],
|
| ["http://192.168.1.1/banking/login"]
|
| ]
|
| )
|
|
|
| interface.launch() |