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()