Add compare_routing.py utilities
This commit is contained in:
59
compare_routing.py
Normal file
59
compare_routing.py
Normal file
@@ -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()
|
||||
Reference in New Issue
Block a user