diff --git a/compare_routing.py b/compare_routing.py new file mode 100644 index 0000000..7aab68a --- /dev/null +++ b/compare_routing.py @@ -0,0 +1,59 @@ +import os +import re + +def extract_ips_from_rsc(filepath): + """Mengekstrak rentang IP dari file .rsc (add list=xyz address=\"IP\")""" + ips = set() + if not os.path.exists(filepath): + return ips + + with open(filepath, 'r') as f: + for line in f: + # Mencari pola seperti: address="1.2.3.4/24" atau address=1.2.3.4/24 + match = re.search(r'address="?([^"\s]+)"?', line) + if match: + ip_found = match.group(1) + # Abaikan ip '1.2.3.4' bawaan header kalau ada + if ip_found != "1.2.3.4": + ips.add(ip_found) + return ips + +def compare_lists(): + print("Mengekstrak IP dari nice.rsc...") + nice_ips = extract_ips_from_rsc("nice.rsc") + print(f"Total Subnet di nice.rsc: {len(nice_ips)}") + + print("Mengekstrak IP dari routing-lokal.rsc (BGP API)...") + bgp_ips = extract_ips_from_rsc("routing-lokal.rsc") + print(f"Total Subnet di routing-lokal.rsc: {len(bgp_ips)}") + + # Hitung Persimpangan + intersection = nice_ips.intersection(bgp_ips) + + # Hitung yang HANYA ada di nice.rsc + only_nice = nice_ips - bgp_ips + + # Hitung yang HANYA ada di BGP (routing-lokal.rsc) + only_bgp = bgp_ips - nice_ips + + # Persentase overlap (Berapa % isi nice.rsc yang tercakup oleh BGP kita) + coverage_nice = (len(intersection) / len(nice_ips) * 100) if nice_ips else 0 + + print("\n--- HASIL PERBANDINGAN ---") + print(f"Subnet yang SAMA EXACT: {len(intersection)} rute") + print(f"Subnet HANYA ada di nice.rsc (Mungkin BGP kita tidak dapat/belum update): {len(only_nice)} rute") + print(f"Subnet HANYA ada di BGP Lokal kita (Mencakup CDN & rute baru): {len(only_bgp)} rute") + + print(f"\nPersentase isi nice.rsc yang SAMA PERSIS tertampung di BGP Anda: {coverage_nice:.2f}%") + + print("\n*Catatan Analisis Teknis*:") + print("- BGP biasanya mengirimkan agregat jalur besar (supernet / CIDR lebih kecil).") + print("- Sementara nice.rsc punya banyak hasil perpecahan subnet kecil (/24) yang statis.") + print("- Maka dari itu, wajar jika *exact match* tidak mencapai 100%, sangat mungkin rute dari bgp (contoh /19) sudah meng-cover rute dari nice.rsc (contoh 32 buah rute /24).") + +if __name__ == "__main__": + if not os.path.exists("nice.rsc") or not os.path.exists("routing-lokal.rsc"): + print("Harap pastikan file nice.rsc dan routing-lokal.rsc tersedia di dalam direktori:") + print(os.getcwd()) + else: + compare_lists()