Files
iix/compare_routing.py
2026-02-26 10:32:40 +08:00

60 lines
2.5 KiB
Python

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