From 2692cbbf3d0be55ab43cabfd8ac6d06a86d59d5e Mon Sep 17 00:00:00 2001 From: Kilokem Date: Fri, 26 Sep 2025 16:36:30 +0000 Subject: [PATCH] Upload files to "/" --- WebsiteReachChecker.py | 168 + training_data.csv | 123359 ++++++++++++++++++++++++++++++++++++++ training_data_en.csv | 36226 +++++++++++ 3 files changed, 159753 insertions(+) create mode 100644 WebsiteReachChecker.py create mode 100644 training_data.csv create mode 100644 training_data_en.csv diff --git a/WebsiteReachChecker.py b/WebsiteReachChecker.py new file mode 100644 index 0000000..37fa6ea --- /dev/null +++ b/WebsiteReachChecker.py @@ -0,0 +1,168 @@ +import os +import csv +import requests +import time +from datetime import datetime + +class FirewallChecker: + def __init__(self): + self.csv_file = "./training_data_en.csv" + self.results_dir = "./results" + os.makedirs(self.results_dir, exist_ok=True) + self.categories = [] + self.records = [] + self._load_csv() + + def _load_csv(self): + if not os.path.exists(self.csv_file): + return + with open(self.csv_file, newline="", encoding="utf-8") as f: + reader = csv.reader(f) + for row in reader: + if len(row) < 6: + continue + url_raw = row[2].strip().strip('"') + category = row[3].strip().strip('"') + description = row[5].strip().strip('"') + url = url_raw if url_raw.startswith(("http://","https://")) else "http://"+url_raw + self.records.append({ + "url": url, + "category": category, + "description": description + }) + if category not in self.categories: + self.categories.append(category) + self.categories.sort() + + def print_menu(self): + print("\n" + "="*60) + print("🔥 FIREWALL & WEBSITE ACCESSIBILITY CHECKER 🔥") + print("="*60) + print(f"Data file: {'✓ found' if os.path.exists(self.csv_file) else '✗ missing'}") + print("="*60) + print("1. 📋 Show Categories") + print("2. 📂 List URLs in Category") + print("3. 🌐 Test Category Accessibility") + print("4. 🎯 Test Single URL") + print("5. 📝 Show Description for a URL") + print("6. 🚀 Test ALL URLs & Save Results") + print("7. 🔍 Show CSV Structure") + print("8. ❌ Exit") + print("="*60) + + def show_categories(self): + print("\n📋 AVAILABLE CATEGORIES") + for i, cat in enumerate(self.categories,1): + print(f"{i:3d}. {cat}") + print(f"\nTotal: {len(self.categories)}") + input("\nPress Enter to continue...") + + def list_urls(self, category): + return [r["url"] for r in self.records if r["category"]==category] + + def _save_results(self, details, action_label): + ts = datetime.now().strftime("%Y%m%d_%H%M%S") + fname = os.path.join(self.results_dir, f"results_{action_label.split('/')[0]}_{ts}.txt") + with open(fname, "w", encoding="utf-8") as f: + for url, ok in details: + status = "REACHABLE" if ok else "BLOCKED" + f.write(f"{url}\t{status}\n") + print(f"\n✅ Results saved to {fname}") + + def test_urls(self, urls, action_label): + reachable=unreachable=0 + details=[] + print(f"\nTesting {len(urls)} URLs...") + for i,url in enumerate(urls,1): + try: + r = requests.get(url, timeout=5) + ok = (r.status_code==200) + except: + ok = False + sym = "✓" if ok else "✗" + print(f"[{i:4d}/{len(urls):4d}] {sym} {url}") + reachable += ok + unreachable += not ok + details.append((url, ok)) + time.sleep(0.1) + total = reachable+unreachable + pct = (reachable/total*100) if total else 0 + print("\n📊 SUMMARY") + print(f" Tested: {total}") + print(f" Reachable: {reachable}") + print(f" Unreachable: {unreachable}") + print(f" Success rate:{pct:.1f}%") + self._save_results(details, action_label) + input("\nPress Enter to continue...") + + def test_single(self): + url = input("Enter URL: ").strip() + if not url: + print("❌ No URL."); input("\nEnter to continue..."); return + if not url.startswith(("http://","https://")): + url = "http://"+url + print(f"\n▶ Testing {url}") + try: + start = time.time() + r = requests.get(url, timeout=10) + elapsed = (time.time()-start)*1000 + ok = (r.status_code==200) + print(f"Status: {r.status_code} {r.reason}") + print(f"Time: {elapsed:.1f} ms") + print(f"Length: {len(r.content)} bytes") + except Exception as e: + ok = False + print(f"Error: {e}") + self._save_results([(url, ok)], "single") + input("\nPress Enter to continue...") + + def show_description(self): + url = input("Enter URL: ").strip() + rec = next((r for r in self.records if r["url"].rstrip("/")==url.rstrip("/")), None) + if not rec: + print("❌ URL not found.") + else: + print(f"\n🔖 Description:\n{rec['description']}") + input("\nPress Enter to continue...") + + def show_csv_structure(self): + with open(self.csv_file, newline="", encoding="utf-8") as f: + reader = csv.reader(f) + first = next(reader, None) + print("\n🔍 CSV STRUCTURE") + for i,col in enumerate(first or []): + print(f" {i}: {col}") + input("\nPress Enter to continue...") + + def test_all_and_save(self): + urls = [r["url"] for r in self.records] + self.test_urls(urls, "all") + + def run(self): + if not os.path.exists(self.csv_file): + print("❌ training_data_en.csv missing"); return + while True: + self.print_menu() + c = input("Choose (1-8): ").strip() + if c=="1": self.show_categories() + elif c=="2": + idx = int(input("Category #: ")) -1 + if 0<=idx