Skip to content

Instantly share code, notes, and snippets.

@tonusoo
Last active July 27, 2026 09:17
Show Gist options
  • Select an option

  • Save tonusoo/d1662ff5f08458cd0f58221f22e11296 to your computer and use it in GitHub Desktop.

Select an option

Save tonusoo/d1662ff5f08458cd0f58221f22e11296 to your computer and use it in GitHub Desktop.
RPKI ASPA objects for AS numbers registered in a country || discussion on CERT-EE channel
#!/usr/bin/env python3
"""RPKI ASPA objects for ASes registered in a country.
Script finds all the AS numbers from RIR statistics files
for a country in which the AS number holder is legally based.
AS numbers are checked against the RPKI ASPA dataset and ASNs
are categorized into two groups: ones with an ASPA object and
ones without it.
"""
import sys
import time
import json
import logging
import datetime
import requests
import matplotlib.pyplot as plt
TARGET_COUNTRY = "EE"
RPKI_JSON_PATH = "/var/lib/rpki-client/json"
GRAPH_FILE_PATH = "ee_aspa_objects_simplistic.png"
logging.basicConfig(
level=logging.INFO,
# level=logging.DEBUG,
format="{asctime} - [{funcName}] - {levelname} - {message}",
style="{",
datefmt="%Y-%m-%d %H:%M:%S %z",
handlers=[logging.StreamHandler(sys.stderr)],
)
logging.getLogger("urllib3").setLevel(logging.WARNING)
def get_as_numbers(target_country):
"""Fetch the AS numbers registered in the queried country."""
as_numbers = []
session = requests.Session()
logging.info(f"Fetching registered ASNs for {target_country}...")
try:
# Country Resource List API endpoint returns Internet resources
# from the RIR Statistics files.
# API conveniently returns results from all the RIR Statistics
# files. For example, this means that a query for FR(France) also
# returns ASNs registered in France overseas territories like
# Saint Barthelemy or Saint Martin under ARIN:
#
# martin@lab-svr:~$ curl -s 'https://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest' | \
# > awk -F '|' '$2 == "FR" && $3 == "asn"'
# arin|FR|asn|886|1|20220607|assigned|dcd83ca27d875308f8e04a78c681fdaf
# arin|FR|asn|887|1|20220607|assigned|dcd83ca27d875308f8e04a78c681fdaf
# arin|FR|asn|21538|1|20120717|assigned|9e04751fb2c886118f0c6ce364ade121
# arin|FR|asn|29774|1|20240318|assigned|65d33fbe60bb683859f484a10f9c1906
# arin|FR|asn|33392|1|20041208|assigned|93762c53aecac441080d7523d57ceaf2
# arin|FR|asn|36511|1|20130419|assigned|e9f0b1dcd41273feef963585ab70ec6d
# arin|FR|asn|394485|1|20150923|assigned|5a8043d76c523baa462a8b136a914853
# arin|FR|asn|396950|1|20180703|assigned|dcd83ca27d875308f8e04a78c681fdaf
# martin@lab-svr:~$
resp = session.get(
"https://stat.ripe.net/data/country-resource-list/data.json?"
f"resource={target_country}",
timeout=20,
)
resp.raise_for_status()
data = resp.json().get("data", {})
resources = data.get("resources", {})
as_numbers_str = resources.get("asn", [])
as_numbers = [int(asn) for asn in as_numbers_str]
except (requests.exceptions.RequestException, ValueError) as err:
logging.error(f"Failed to fetch ASNs for {target_country}: {err!r}")
return as_numbers
def get_as_names(asns):
"""Fetch the descriptive name of the AS number holder."""
asn_names = {}
session = requests.Session()
logging.info(f"Fetching names for {len(asns)} unique ASNs...")
for asn in asns:
holder = None
try:
resp = session.get(
"https://stat.ripe.net/data/as-overview/data.json?"
f"resource=AS{asn}",
timeout=20,
)
resp.raise_for_status()
data = resp.json().get("data", {})
holder = data.get("holder")
# Occasionally the "AS Overview" API returns an empty name
# for the ASN. Fallback to whois database.
if not holder:
resp = session.get(
"https://stat.ripe.net/data/whois/data.json?"
f"resource=AS{asn}",
timeout=20,
)
resp.raise_for_status()
data = resp.json().get("data", {}).get("records", [])
for record in data:
for item in record:
if isinstance(item, dict):
key = item.get("key", "").lower()
# While for example RIPE and APNIC use
# "as-name" attribute, then the ARIN
# registry uses "ASName".
if key in ("as-name", "asname"):
holder = item.get("value")
if not holder:
holder = "Unknown AS name"
except requests.exceptions.RequestException as err:
logging.warning(f"Failed to fetch AS name for AS{asn}: {err!r}")
holder = "Unknown AS name"
asn_names[asn] = holder
time.sleep(0.2)
return asn_names
def get_aspas(rpki_json_path):
"""Load ASPAs from rpki-client JSON output into a dictionary."""
logging.info(f'Loading RPKI ASPAs from "{rpki_json_path}"...')
aspa_dict = {}
with open(rpki_json_path, "r", encoding="utf-8") as f:
rpki_data = json.load(f)
for aspa in rpki_data.get("aspas", []):
try:
aspa_dict[aspa["customer_asid"]] = aspa["providers"]
except KeyError:
continue
logging.info(f"Loaded {len(aspa_dict)} validated ASPA payloads")
return aspa_dict
def generate_graph(stats, target_country, graph_file_path):
"""Plot the results to donut chart."""
labels = [
"ASPA object exists",
"ASPA object missing",
]
sizes = [
stats.get("aspa_obj_exists"),
stats.get("aspa_obj_missing"),
]
if sum(sizes) == 0:
logging.warning(
f"Skipping graph generation for {target_country}. "
"No ASPA objects were found."
)
return
total_asns = sum(sizes)
# Green, gray.
colors = ["#228B22", "#808080"]
filtered_sizes = [size for size in sizes if size > 0]
filtered_colors = [color for size, color in zip(sizes, colors) if size > 0]
filtered_labels = [label for size, label in zip(sizes, labels) if size > 0]
# Avoid overlapping labels. Do not show a label if
# a slice is very narrow, that is, 5% or below.
clean_labels = [
label if (size / total_asns * 100) > 5 else ""
for label, size in zip(filtered_labels, filtered_sizes)
]
def hide_small_percentages(pct):
return f"{pct:.0f}%" if pct > 5 else ""
fig, ax = plt.subplots(figsize=(6, 6))
ax.pie(
filtered_sizes,
labels=clean_labels,
colors=filtered_colors,
autopct=hide_small_percentages,
startangle=90,
counterclock=False,
pctdistance=0.8,
labeldistance=1.05,
wedgeprops={"width": 0.4, "edgecolor": "white"},
)
ax.text(
0,
0,
f"Total AS numbers analyzed:\n{total_asns}",
ha="center",
va="center",
fontsize=11,
fontweight="bold",
)
ax.axis("equal")
fig.suptitle(
f"ASPA objects for AS numbers registered in {target_country}",
fontsize=16,
y=1.0,
)
legend_labels = [
f'{label}: {size} {"ASN" if size == 1 else "ASNs"}'
for label, size in zip(filtered_labels, filtered_sizes)
]
ax.legend(legend_labels, loc="center left", bbox_to_anchor=(1.2, 0.5))
current_date = datetime.datetime.now().strftime("%d.%m.%Y")
fig.text(
0.5,
0.02,
f"Generated on {current_date}",
ha="center",
va="bottom",
fontsize=9,
color="gray",
alpha=0.5,
)
try:
plt.savefig(graph_file_path, bbox_inches="tight")
logging.info(f'Graph successfully saved to "{graph_file_path}"')
except OSError as err:
logging.error(f'Failed to save "{graph_file_path}": {err!r}')
def main():
"""Main function calling other functions."""
asn_list = get_as_numbers(TARGET_COUNTRY)
if not asn_list:
logging.error(f"No ASNs found for country {TARGET_COUNTRY}. Exiting.")
sys.exit(1)
asn_names_dict = get_as_names(asn_list)
aspa_dict = get_aspas(RPKI_JSON_PATH)
logging.info(
f"Starting to compare {len(asn_list)} AS numbers "
f"associated with {TARGET_COUNTRY} against RPKI ASPAs"
)
stats = {
"aspa_obj_exists": 0,
"aspa_obj_missing": 0,
}
for asn in asn_list:
as_name = asn_names_dict.get(asn, "Unknown AS name")
if asn in aspa_dict:
stats["aspa_obj_exists"] += 1
logging.info(
f"AS {asn} ({as_name}) has an ASPA object "
"with following set of provider ASes: "
f'{", ".join(map(str, aspa_dict[asn]))}'
)
else:
stats["aspa_obj_missing"] += 1
logging.info(f"AS {asn} ({as_name}) does not have an ASPA object")
print(
"country",
"as_numbers_with_aspa_obj",
"as_numbers_without_aspa_obj",
sep=",",
)
print(
TARGET_COUNTRY,
stats.get("aspa_obj_exists", 0),
stats.get("aspa_obj_missing", 0),
sep=",",
)
if GRAPH_FILE_PATH:
generate_graph(stats, TARGET_COUNTRY, GRAPH_FILE_PATH)
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
logging.warning("Interrupted")
sys.exit(1)
2026-07-26 18:21:49 +0300 - [get_as_numbers] - INFO - Fetching registered ASNs for EE...
2026-07-26 18:21:50 +0300 - [get_as_names] - INFO - Fetching names for 233 unique ASNs...
2026-07-26 18:23:12 +0300 - [get_aspas] - INFO - Loading RPKI ASPAs from "/var/lib/rpki-client/json"...
2026-07-26 18:23:14 +0300 - [get_aspas] - INFO - Loaded 2488 validated ASPA payloads
2026-07-26 18:23:14 +0300 - [main] - INFO - Starting to compare 233 AS numbers associated with EE against RPKI ASPAs
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 2586 (ELISAEE-AS Elisa Eesti AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 2876 (AS_G-ENTERPRISES Gheorghiu Enterprises OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 3130 (RGNET-SEA RGnet OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 3204 (XTOM-V-PS xTom OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 3221 (EENet-AS Haridus- ja Teadusministeerium) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 3249 (ESTPAK Telia Eesti AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 3332 (SWEDBANK-AS Swedbank AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 3920 (PUSHPKT PUSHPKT OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 3927 (RGNET-IAD RGnet OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 3970 (RGNET-TE-EX RGnet OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 4128 (RGNET-DFW RGnet OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 5608 (FVNN Magnus McKay Moeller) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 8240 (AS8240 Information System Authority) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 8728 (AS INFONET) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 8756 (RADIO-MSU Windmill Telecom OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 9204 (AS_G-ENTERPRISES Gheorghiu Enterprises OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 11967 (HOP179 Hop179 OU) has an ASPA object with following set of provider ASes: 835, 1299, 6939, 34927, 213449, 213753, 214809, 215828
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 12293 (XVID Xvid Services OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 12757 (IPTRON IPTRON.NET OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 13272 (Starman Elisa Eesti AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 16014 (ESTPAK-GRX Telia Eesti AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 16255 (IRIDIUM-AS IridiumProvider OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 20948 (SKYLINK-AS Skylink Networking Ltd) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 21147 (IF-NOC-AS If P&C Insurance AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 24984 (LuminorLT Luminor Bank AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 31081 (RIIGIKONTROLL-AS National Audit Office of Estonia) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 31365 (NGI2-TR NGI2 Technologies OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 31605 (ALLOY-NETWORKS Titanium OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 34702 (WAVECOM-AS Aktsiaselts WaveCom) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 34729 (SILBERAUTO Veho Baltics OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 35713 (SERTY-AS Careerum OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 39038 (KERNEL-AS Kernel AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 39632 (EESTIPANK Eesti Pank) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 39823 (COMPIC Compic OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 42012 (ETV-AS Estonian Public Broadcasting) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 42016 (TLL-AERO-AS AS Tallinna Lennujaam) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 42300 (TOPCONNECT-AS TOP CONNECT OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 42380 (ERGOLT-AS Ergo Insurance SE) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 42472 (SMARTEN-AS AS Smarten Logistics) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 42474 (IL SmartApe OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 43682 (EE-SEB-AS AS SEB Pank) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 43881 (SMARTLINK-AS Revnetek Systems OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 43883 (CITY-AS Citynet OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 43937 (PTNET Playtech Estonia OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 43958 (TALLINK-AS AS Tallink Grupp) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 43993 (ITel-AS IronTelecom OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 44794 (DNSCALE DNScale OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 44839 (TELEGRUPP-AS Telegrupp AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 44929 (NORD_CONNECT Nord Connect OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 47105 (as-vd Vault Dweller OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 47143 (TDHN Todayhost Limited) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 47294 (NOMD-AS Nomadl OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 47416 (IIX-EE AS INFONET) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 47525 (TBB-AS AS TBB pank) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 47713 (EE-EUROPEANNETWORKS EUROPEAN NETWORKS OY) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 47736 (SMIT IT and Development Center of Ministry of Interior, Estonia) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 48539 (bifrost-systems Bifrost Systems OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 48924 (SOFTERIUM-AS Global Software Investment OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 49191 (SOFTERIUM-AS Global Software Investment OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 49604 (ZONE Zone Media OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 50535 (EUSKILL-AS Theta Sigma Industries OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 50747 (It-HostingGroup It Hosting Group) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 50794 (levira Levira AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 51103 (EDS-EE EDS SYSTEMS OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 51349 (EIS-AS Foundation Eesti Interneti Sihtasutus) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 51504 (Telset AS Telset) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 56588 (EE-CERT Information System Authority) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 57063 (PUZL-AS GPU Computing OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 57196 (CLONOTH Clonoth OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 57201 (EDF-AS Estonian Defence Forces) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 57873 (SONICTEST SONICTEST Ltd.) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 57934 (WJY-AS WJY OU) has an ASPA object with following set of provider ASes: 3204
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 59435 (BLAZELYNK CSpace Hostings OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 59725 (Solifinance-AS Solifinance OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 60320 (EDOMREG European Domain Registry OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 60415 (LOGINET-AS Loginet Solutions LLC) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 60608 (Olympic Olympic Entertainment Group AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 61189 (ELKDATA Elkdata OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 61254 (ESTOXY-OU ESTOXY OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 61307 (EE-AS-STV AS STV) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 61328 (METROTEC OU Metrotec) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 62005 (BV-EU-AS BlueVPS OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 62024 (PACS SIHTASUTUS EESTI TERVISHOIU PILDIPANK) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 62212 (EE SmartApe OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 62248 (MODIRUM MODIRUM MDPAY OU) has an ASPA object with following set of provider ASes: 1299, 2116, 13335, 50304, 208367
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 62303 (DNSCALE DNScale OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 62406 (DNSCALE DNScale OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 64451 (XVID-SERVICES Xvid Services OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 64467 (CROABH Magnus McKay Moeller) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 196743 (interframe OU Interframe) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 196785 (EE-ERGO-AS ERGO Insurance SE) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 197060 (IP-KONEKESKUSTEOU Prominion OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 197289 (HELMES-AS AS HELMES) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 197338 (SERDNA Andres Ivanov) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 197354 (DigitalEra-AS DigitalEra Tech OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 197517 (SALVA-AS Salva Kindlustuse AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 197611 (LHV-AS AS LHV Pank) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 197666 (STUDIO-TEN-OU STUDIO TEN OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 197683 (ANONSYS Anon City Systems OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 197974 (PLYM-AS Vladislav Nitsenko) has an ASPA object with following set of provider ASes: 49581, 62255, 137409, 213520, 214762
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 198006 (bearmetal Bear Metal OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 198068 (PAGM-AS P.A.G.M. OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 198379 (EE-ATEA AS Atea) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 198632 (EE-ESTPAK-IPT Telia Eesti AS) has an ASPA object with following set of provider ASes: 3249
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 198702 (Tenios-DE SmartTel Plus OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 198776 (Edelaraudtee EDELARAUDTEE AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 198780 (two7363SecuritiesOU 27363 Securities OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 198966 (FILL Reintiler OU) has an ASPA object with following set of provider ASes: 3249, 3327
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 199328 (EKSPRESS-DIGITAL Ekspress Grupp AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 199650 (One-OT 1oT OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 199800 (VORGUVARA OIXIO IT AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 199867 (PAGM-AS-2 P.A.G.M. OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 200326 (RANDHOST Randhost OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 200396 (ROUTE179-AS EpicQuestGames OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 200774 (atlasnode Atlasnode OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 200804 (NSS OU NORTHSIDE SOLUTIONS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 201256 (MurphyHolding MurphyHolding OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 201273 (CUBE2 cubequadrat OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 201344 (PUSHPKT-OU PUSHPKT OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 201601 (Astrec-Data Astrec Data OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 201613 (CENTURY-AS 22nd Century Dev OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 201906 (EESTIPOST-AS Eesti Post AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 201908 (DATALIGHT-AS DATALIGHT OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 202063 (Admiral-Markets Admiral Markets AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 202225 (bighost-nl Helionet OU) has an ASPA object with following set of provider ASes: 8315, 49981
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 202376 (ARVID-LOGICUM Arvid Logicum OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 202413 (PRONKIN-AS Pronkin Timofei) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 202480 (EE-TallinnaSadam AS Tallinna Sadam) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 202635 (SERVERFARM Server Farm LLC) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 202652 (ELEVI-AS Elevi AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 202705 (PAVALI-TECHNOLOGY Pavali Technology OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 202759 (FairyHosting RJ Network OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 202952 (IRIDIUM-AS IridiumProvider OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 203021 (TERVISEKASSA Tervisekassa) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 203065 (eu-LISA eu-LISA) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 203081 (GEENET Geenet OY) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 203273 (NetCraftersOU NetCrafters OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 203311 (CCDCOE NATO Cooperative Cyber Defence Centre of Excellence) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 203676 (ARJOM-AS Arjom Arinenko) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 203701 (ROCKET-AS RocketConnect OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 203906 (PERH Sihtasutus Pohja-Eesti Regionaalhaigla) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 204023 (DNSDOT Brainoza OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 204072 (QUICKPORT Quickport OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 204411 (BIGBANK Bigbank AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 204472 (WELCOMEHOST Welcomehost OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 204595 (UUSPROGRAMM UUS PROGRAMM) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 204671 (HABR-AS Habr Europe OU) has an ASPA object with following set of provider ASes: 174, 3223, 6939, 8728, 9002
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 205346 (EANS Lennuliiklusteeninduse AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 205504 (FAL-AS Skylink Networking Ltd) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 205621 (ZENTRIAOU Zentria OU) has an ASPA object with following set of provider ASes: 20473, 212895, 214132
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 205646 (NEWTEL-AS Newtel Company OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 205696 (EE-APOLLOTV AS Postimees Grupp) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 205930 (VIRTUAALCOM Virtuaal.com OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 205950 (INFONET-DC INFONET DC OY) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 206151 (prolinkas Elevi AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 206714 (SKIDSOLUTIONS SK ID Solutions AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 206804 (EstNOC-GLOBAL EstNOC OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 206844 (RIKS Riigi Info- ja Kommunikatsioonitehnoloogia Keskus) has an ASPA object with following set of provider ASes: 8240
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 206919 (AGL-DIVISION-AS Carizma Invest OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 207037 (RV Information System Authority) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 207083 (HostSlim-Global-Network HOSTSLIM OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 207213 (TAMONE-OU TAMONE OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 207254 (EE-emeedia AS Postimees Grupp) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 207428 (REDNET Rednet LLC) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 207522 (mygaru_au Mygaru OU Private Limited Company) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 207568 (teleone Teleone OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 207800 (RTIX Information System Authority) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 207819 (novametro NOVAMETRO OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 207872 (CTE1 OU CSC Telecom Estonia) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 208076 (INFRA1-AS-EE Infra1 OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 208283 (Cybernetica2-EE Cybernetica AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 208338 (Cybernetica-EE Cybernetica AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 208367 (CSPACEHOSTINGS CSpace Hostings OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 208440 (GMHOST-EE GmhostGrupp OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 208446 (SPACEBEAR-AS Spacebear OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 208550 (Transferwise-est Wise Payments Limited Eesti filiaal) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 208673 (ESTOXY-EE ESTOXY OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 208832 (TWINSERVERS-AS Twinservers OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 208834 (COOPPANK Coop Pank AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 209153 (ARVID Arvid Logicum OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 209537 (Vying-Technologies Vying Technologies OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 209554 (ISIF-AS ISIF OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 209587 (eestiloto AS Eesti Loto) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 209722 (Tryware Tryware OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 209798 (EASA Eesti Avaliku Sektori Andmeside MTU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 209842 (CYBEXER CybExer Technologies OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 210002 (STP SmartTel Plus OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 210009 (unknown MadCats OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 210283 (ASDIGIFINANCE DIGIFINANCE OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 210284 (novametroTallin NOVAMETRO OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 210302 (PIPEDRIVE-M3 Pipedrive OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 210434 (AS-NETS360 nets360 OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 210661 (ZMTO ZMTO Technologies OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 210671 (Virtuaalinfra-AS Virtuaalinfra OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 210734 (IPHOSTER IPHOSTER OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 210978 (office NOVAMETRO OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 211156 (ELEKS-PL Eleks Holding OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 211230 (SEANCONSULTING Sean Consulting OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 211328 (nets-ee-as Nets Estonia AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 211451 (EEMCF MCF Group Estonia OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 211494 (NARAYANA Narayana OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 211924 (PRINTLAB-AS PrintLab OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 212159 (HOOD-VPS Martin Soovares) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 213172 (ee-tehik Health and Welfare Information Systems) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 213267 (LuminorLV Luminor Bank AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 213410 (OakHost OakHost OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 213459 (SNOWD Snowd Security OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 213728 (itcycle ITCYCLE OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 213757 (IMPRESSIVE-SOLUTIONS-AS Impressive Solutions OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214132 (EE-3NV-AS 3NV OU) has an ASPA object with following set of provider ASes: 174, 1257
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214246 (Impressive-Solutions-OU Impressive Solutions OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214279 (DASABO DASABO OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214322 (hostander-as HostAnder OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214630 (KYBERORG-IT-AS Kyberorg IT OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214639 (TAKEHOST-AS Raul Ghita trading as 'Ghita Telekom') does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214647 (YADDA Yadda OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214693 (FUSIORA Fusiora OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214712 (flokli FLOKLI OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214776 (TELIQON-AS Teliqon Communications OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214790 (BRAINOZA Brainoza OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214919 (KABAT-AS Kabat OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 214976 (APIVERSA API VERSA OU) has an ASPA object with following set of provider ASes: 0
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 215447 (PRIMEND Primend OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 215467 (Skhron Skhron OU) has an ASPA object with following set of provider ASes: 3399, 5511, 6939, 37988, 53667, 59711, 142064, 208453, 214354, 263702, 269070
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 215709 (AS-YOLLA YOLLA CALLS INTERNATIONAL OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 215955 (ALTEASYSTEMS-AS ALTEASYSTEMS OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 216253 (Interhive-AS Interhive OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 216263 (RADICENTER Radicenter OU) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 216408 (TAVEX Tavid AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 219377 (Roman-AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 219395 (EDCS-AS) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 219436 (CrocNet) does not have an ASPA object
2026-07-26 18:23:14 +0300 - [main] - INFO - AS 219508 (RJNetwork) does not have an ASPA object
2026-07-26 18:23:15 +0300 - [generate_graph] - INFO - Graph successfully saved to "ee_aspa_objects_simplistic.png"
country,as_numbers_with_aspa_obj,as_numbers_without_aspa_obj
EE,13,220
@tonusoo

tonusoo commented Jul 26, 2026

Copy link
Copy Markdown
Author

Austria:

at_aspa_objects_simplistic

Belgium:

be_aspa_objects_simplistic

Bulgaria:

bg_aspa_objects_simplistic

Croatia:

hr_aspa_objects_simplistic

Cyprus:

cy_aspa_objects_simplistic

Czech Republic:

cz_aspa_objects_simplistic

Denmark:

dk_aspa_objects_simplistic

Estonia:

ee_aspa_objects_simplistic

Finland:

fi_aspa_objects_simplistic

France:

fr_aspa_objects_simplistic

Germany:

de_aspa_objects_simplistic

Greece:

gr_aspa_objects_simplistic

Hungary:

hu_aspa_objects_simplistic

Ireland:

ie_aspa_objects_simplistic

Italy:

it_aspa_objects_simplistic

Latvia:

lv_aspa_objects_simplistic

Lithuania:

lt_aspa_objects_simplistic

Luxembourg:

lu_aspa_objects_simplistic

Malta:

mt_aspa_objects_simplistic

Netherlands:

nl_aspa_objects_simplistic

Poland:

pl_aspa_objects_simplistic

Portugal:

pt_aspa_objects_simplistic

Romania:

ro_aspa_objects_simplistic

Slovakia:

sk_aspa_objects_simplistic

Slovenia:

si_aspa_objects_simplistic

Spain:

es_aspa_objects_simplistic

Sweden:

se_aspa_objects_simplistic

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment