60 lines
2.5 KiB
Python
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()
|