From 2766872aad50353599ad5336e955fe71c3353c2c Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 16 Jul 2026 06:42:03 +0000 Subject: [PATCH 01/11] snapshot: preserve production-only changes (Izzy PDF export, adoption tracker, audit scripts) Working tree was 3+ months ahead of git in uncommitted local edits, sitting on a detached HEAD at d3611a8 (2026-04-09), never reconciled with main. Committing as-is on its own branch, without touching main or the detached HEAD, to stop these files existing only on this one server: - public/index.html + server.js: PDF export add-on gated to client Izzy, full Adoption Tracker overlay (ASPA + IPv6 tabs) -- neither exists anywhere in git history on any branch until now - audit/: daily/rotating audit scripts + email report sender, previously untracked - scripts/: tunnel-cleanup.sh, refresh-peeringdb.sh, previously untracked - deploy-from-scp.sh, webhook-subs.json, hijack-alerts.json, aspa-adoption-history.json: previously untracked runtime/deploy state - public/public/: duplicate mirror of the HTML variants found alongside the real public/ dir, preserved as found No reconciliation with main attempted here -- that needs a deliberate pass, not a side effect of a backup commit. --- aspa-adoption-history.json | 871 + audit/asn_pool.json | 1 + audit/daily_audit.py | 176 + audit/rotating_audit.py | 270 + audit/run_daily_audit.sh | 6 + audit/send_audit_report.py | 226 + audit/send_audit_report.sh | 3 + deploy-from-scp.sh | 9 + hijack-alerts.json | 24550 ++++++++++++++++++++ package-lock.json | 804 +- package.json | 1 + public/index.html | 357 +- public/index.html.bak-20260429_211603 | 4421 ++++ public/public/design-draft-editorial.html | 1129 + public/public/index-classic.html | 2898 +++ public/public/index-editorial.html | 3332 +++ public/public/index.html | 4126 ++++ public/public/index.html.bak | 2357 ++ public/public/lia.html | 488 + public/public/shell.html | 420 + scripts/refresh-peeringdb.sh | 11 + scripts/tunnel-cleanup.sh | 29 + server.js | 1655 +- webhook-subs.json | 1 + 24 files changed, 48040 insertions(+), 101 deletions(-) create mode 100644 aspa-adoption-history.json create mode 100644 audit/asn_pool.json create mode 100755 audit/daily_audit.py create mode 100644 audit/rotating_audit.py create mode 100755 audit/run_daily_audit.sh create mode 100755 audit/send_audit_report.py create mode 100755 audit/send_audit_report.sh create mode 100755 deploy-from-scp.sh create mode 100644 hijack-alerts.json create mode 100644 public/index.html.bak-20260429_211603 create mode 100644 public/public/design-draft-editorial.html create mode 100644 public/public/index-classic.html create mode 100644 public/public/index-editorial.html create mode 100644 public/public/index.html create mode 100644 public/public/index.html.bak create mode 100644 public/public/lia.html create mode 100644 public/public/shell.html create mode 100755 scripts/refresh-peeringdb.sh create mode 100755 scripts/tunnel-cleanup.sh create mode 100644 webhook-subs.json diff --git a/aspa-adoption-history.json b/aspa-adoption-history.json new file mode 100644 index 0000000..a256bea --- /dev/null +++ b/aspa-adoption-history.json @@ -0,0 +1,871 @@ +[ + { + "date": "2026-04-29", + "ts": 1777506539332, + "aspa_objects": 1781, + "roa_count": 846608, + "atlas_asns_total": 4698, + "atlas_asns_with_aspa": 393, + "coverage_pct_atlas": 8.37, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-04-30", + "ts": 1777591207204, + "aspa_objects": 1789, + "roa_count": 845275, + "atlas_asns_total": 4706, + "atlas_asns_with_aspa": 391, + "coverage_pct_atlas": 8.31, + "aspa_delta": 4, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-01", + "ts": 1777676486871, + "aspa_objects": 1791, + "roa_count": 835376, + "atlas_asns_total": 4698, + "atlas_asns_with_aspa": 390, + "coverage_pct_atlas": 8.3, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-02", + "ts": 1777764423571, + "aspa_objects": 1790, + "roa_count": 838422, + "atlas_asns_total": 4698, + "atlas_asns_with_aspa": 389, + "coverage_pct_atlas": 8.28, + "aspa_delta": -1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-03", + "ts": 1777852360413, + "aspa_objects": 1788, + "roa_count": 848778, + "atlas_asns_total": 4698, + "atlas_asns_with_aspa": 391, + "coverage_pct_atlas": 8.32, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-04", + "ts": 1777925641049, + "aspa_objects": 1794, + "roa_count": 849251, + "atlas_asns_total": 4701, + "atlas_asns_with_aspa": 393, + "coverage_pct_atlas": 8.36, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-05", + "ts": 1778013577684, + "aspa_objects": 1803, + "roa_count": 849639, + "atlas_asns_total": 4706, + "atlas_asns_with_aspa": 390, + "coverage_pct_atlas": 8.29, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-06", + "ts": 1778101514437, + "aspa_objects": 1811, + "roa_count": 851176, + "atlas_asns_total": 4709, + "atlas_asns_with_aspa": 392, + "coverage_pct_atlas": 8.32, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-07", + "ts": 1778189451143, + "aspa_objects": 1819, + "roa_count": 854308, + "atlas_asns_total": 4704, + "atlas_asns_with_aspa": 397, + "coverage_pct_atlas": 8.44, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-08", + "ts": 1778277387928, + "aspa_objects": 1826, + "roa_count": 855093, + "atlas_asns_total": 4618, + "atlas_asns_with_aspa": 391, + "coverage_pct_atlas": 8.47, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-09", + "ts": 1778365324597, + "aspa_objects": 1829, + "roa_count": 855728, + "atlas_asns_total": 4617, + "atlas_asns_with_aspa": 386, + "coverage_pct_atlas": 8.36, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-10", + "ts": 1778453261304, + "aspa_objects": 1830, + "roa_count": 855858, + "atlas_asns_total": 4630, + "atlas_asns_with_aspa": 392, + "coverage_pct_atlas": 8.47, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-11", + "ts": 1778532854561, + "aspa_objects": 1842, + "roa_count": 852307, + "atlas_asns_total": 4644, + "atlas_asns_with_aspa": 396, + "coverage_pct_atlas": 8.53, + "aspa_delta": 4, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-12", + "ts": 1778619510110, + "aspa_objects": 1851, + "roa_count": 860353, + "atlas_asns_total": 4638, + "atlas_asns_with_aspa": 400, + "coverage_pct_atlas": 8.62, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-13", + "ts": 1778713039453, + "aspa_objects": 1853, + "roa_count": 869026, + "atlas_asns_total": 4644, + "atlas_asns_with_aspa": 399, + "coverage_pct_atlas": 8.59, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-14", + "ts": 1778801086379, + "aspa_objects": 1874, + "roa_count": 870195, + "atlas_asns_total": 4641, + "atlas_asns_with_aspa": 402, + "coverage_pct_atlas": 8.66, + "aspa_delta": 5, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-15", + "ts": 1778889133380, + "aspa_objects": 1881, + "roa_count": 871665, + "atlas_asns_total": 4656, + "atlas_asns_with_aspa": 406, + "coverage_pct_atlas": 8.72, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-16", + "ts": 1778964126500, + "aspa_objects": 1885, + "roa_count": 871578, + "atlas_asns_total": 4652, + "atlas_asns_with_aspa": 407, + "coverage_pct_atlas": 8.75, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-17", + "ts": 1779051783629, + "aspa_objects": 1884, + "roa_count": 871644, + "atlas_asns_total": 4648, + "atlas_asns_with_aspa": 407, + "coverage_pct_atlas": 8.76, + "aspa_delta": -2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-18", + "ts": 1779139440853, + "aspa_objects": 1897, + "roa_count": 874620, + "atlas_asns_total": 4659, + "atlas_asns_with_aspa": 408, + "coverage_pct_atlas": 8.76, + "aspa_delta": 6, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-19", + "ts": 1779227098051, + "aspa_objects": 1931, + "roa_count": 877276, + "atlas_asns_total": 4663, + "atlas_asns_with_aspa": 409, + "coverage_pct_atlas": 8.77, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-20", + "ts": 1779314755375, + "aspa_objects": 1945, + "roa_count": 882413, + "atlas_asns_total": 0, + "atlas_asns_with_aspa": 0, + "coverage_pct_atlas": 0, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-21", + "ts": 1779402412305, + "aspa_objects": 1956, + "roa_count": 886581, + "atlas_asns_total": 4657, + "atlas_asns_with_aspa": 415, + "coverage_pct_atlas": 8.91, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-22", + "ts": 1779490069486, + "aspa_objects": 1963, + "roa_count": 886989, + "atlas_asns_total": 4656, + "atlas_asns_with_aspa": 416, + "coverage_pct_atlas": 8.93, + "aspa_delta": -1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-23", + "ts": 1779577726657, + "aspa_objects": 1966, + "roa_count": 887123, + "atlas_asns_total": 4662, + "atlas_asns_with_aspa": 421, + "coverage_pct_atlas": 9.03, + "aspa_delta": -1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-24", + "ts": 1779665383794, + "aspa_objects": 1973, + "roa_count": 887505, + "atlas_asns_total": 4658, + "atlas_asns_with_aspa": 419, + "coverage_pct_atlas": 9, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-25", + "ts": 1779753040747, + "aspa_objects": 1984, + "roa_count": 889453, + "atlas_asns_total": 4657, + "atlas_asns_with_aspa": 427, + "coverage_pct_atlas": 9.17, + "aspa_delta": 6, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-26", + "ts": 1779826088383, + "aspa_objects": 1993, + "roa_count": 896728, + "atlas_asns_total": 4683, + "atlas_asns_with_aspa": 426, + "coverage_pct_atlas": 9.1, + "aspa_delta": 8, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-27", + "ts": 1779924276466, + "aspa_objects": 2001, + "roa_count": 904935, + "atlas_asns_total": 4673, + "atlas_asns_with_aspa": 426, + "coverage_pct_atlas": 9.12, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-28", + "ts": 1780012471849, + "aspa_objects": 2014, + "roa_count": 910888, + "atlas_asns_total": 4628, + "atlas_asns_with_aspa": 421, + "coverage_pct_atlas": 9.1, + "aspa_delta": 4, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-29", + "ts": 1780085968110, + "aspa_objects": 2019, + "roa_count": 916441, + "atlas_asns_total": 4640, + "atlas_asns_with_aspa": 424, + "coverage_pct_atlas": 9.14, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-30", + "ts": 1780174163595, + "aspa_objects": 2026, + "roa_count": 918362, + "atlas_asns_total": 4655, + "atlas_asns_with_aspa": 426, + "coverage_pct_atlas": 9.15, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-31", + "ts": 1780262359143, + "aspa_objects": 2031, + "roa_count": 918565, + "atlas_asns_total": 4653, + "atlas_asns_with_aspa": 427, + "coverage_pct_atlas": 9.18, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-01", + "ts": 1780350554630, + "aspa_objects": 2040, + "roa_count": 920847, + "atlas_asns_total": 4673, + "atlas_asns_with_aspa": 430, + "coverage_pct_atlas": 9.2, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-02", + "ts": 1780438750094, + "aspa_objects": 2050, + "roa_count": 925338, + "atlas_asns_total": 4685, + "atlas_asns_with_aspa": 435, + "coverage_pct_atlas": 9.28, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-03", + "ts": 1780526945736, + "aspa_objects": 2054, + "roa_count": 926656, + "atlas_asns_total": 4692, + "atlas_asns_with_aspa": 440, + "coverage_pct_atlas": 9.38, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-04", + "ts": 1780615141853, + "aspa_objects": 2052, + "roa_count": 929579, + "atlas_asns_total": 4699, + "atlas_asns_with_aspa": 438, + "coverage_pct_atlas": 9.32, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-05", + "ts": 1780703337103, + "aspa_objects": 2057, + "roa_count": 933266, + "atlas_asns_total": 4533, + "atlas_asns_with_aspa": 423, + "coverage_pct_atlas": 9.33, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-06", + "ts": 1780776833375, + "aspa_objects": 2057, + "roa_count": 933707, + "atlas_asns_total": 4457, + "atlas_asns_with_aspa": 415, + "coverage_pct_atlas": 9.31, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-07", + "ts": 1780865028684, + "aspa_objects": 2060, + "roa_count": 934451, + "atlas_asns_total": 4624, + "atlas_asns_with_aspa": 432, + "coverage_pct_atlas": 9.34, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-08", + "ts": 1780953225583, + "aspa_objects": 2064, + "roa_count": 935363, + "atlas_asns_total": 4673, + "atlas_asns_with_aspa": 439, + "coverage_pct_atlas": 9.39, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-09", + "ts": 1781043490445, + "aspa_objects": 2082, + "roa_count": 938346, + "atlas_asns_total": 4693, + "atlas_asns_with_aspa": 446, + "coverage_pct_atlas": 9.5, + "aspa_delta": 4, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-10", + "ts": 1781121824287, + "aspa_objects": 2086, + "roa_count": 942559, + "atlas_asns_total": 4692, + "atlas_asns_with_aspa": 444, + "coverage_pct_atlas": 9.46, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-11", + "ts": 1781218962694, + "aspa_objects": 2101, + "roa_count": 949614, + "atlas_asns_total": 4721, + "atlas_asns_with_aspa": 449, + "coverage_pct_atlas": 9.51, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-12", + "ts": 1781305669463, + "aspa_objects": 2104, + "roa_count": 950161, + "atlas_asns_total": 4716, + "atlas_asns_with_aspa": 447, + "coverage_pct_atlas": 9.48, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-13", + "ts": 1781392376261, + "aspa_objects": 2112, + "roa_count": 950030, + "atlas_asns_total": 4727, + "atlas_asns_with_aspa": 450, + "coverage_pct_atlas": 9.52, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-14", + "ts": 1781479082907, + "aspa_objects": 2115, + "roa_count": 950083, + "atlas_asns_total": 4731, + "atlas_asns_with_aspa": 451, + "coverage_pct_atlas": 9.53, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-15", + "ts": 1781565789140, + "aspa_objects": 2119, + "roa_count": 950996, + "atlas_asns_total": 4736, + "atlas_asns_with_aspa": 450, + "coverage_pct_atlas": 9.5, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-16", + "ts": 1781649652082, + "aspa_objects": 2130, + "roa_count": 953250, + "atlas_asns_total": 4733, + "atlas_asns_with_aspa": 450, + "coverage_pct_atlas": 9.51, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-17", + "ts": 1781734424437, + "aspa_objects": 2133, + "roa_count": 954510, + "atlas_asns_total": 4726, + "atlas_asns_with_aspa": 450, + "coverage_pct_atlas": 9.52, + "aspa_delta": -1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-18", + "ts": 1781821528896, + "aspa_objects": 2143, + "roa_count": 957195, + "atlas_asns_total": 4746, + "atlas_asns_with_aspa": 450, + "coverage_pct_atlas": 9.48, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-19", + "ts": 1781908099618, + "aspa_objects": 2146, + "roa_count": 957896, + "atlas_asns_total": 4748, + "atlas_asns_with_aspa": 452, + "coverage_pct_atlas": 9.52, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-20", + "ts": 1781994672218, + "aspa_objects": 2151, + "roa_count": 958031, + "atlas_asns_total": 4735, + "atlas_asns_with_aspa": 452, + "coverage_pct_atlas": 9.55, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-21", + "ts": 1782081244003, + "aspa_objects": 2156, + "roa_count": 958067, + "atlas_asns_total": 4739, + "atlas_asns_with_aspa": 453, + "coverage_pct_atlas": 9.56, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-22", + "ts": 1782167816179, + "aspa_objects": 2163, + "roa_count": 958365, + "atlas_asns_total": 4746, + "atlas_asns_with_aspa": 456, + "coverage_pct_atlas": 9.61, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-23", + "ts": 1782253239274, + "aspa_objects": 2173, + "roa_count": 959022, + "atlas_asns_total": 4743, + "atlas_asns_with_aspa": 457, + "coverage_pct_atlas": 9.64, + "aspa_delta": -1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-24", + "ts": 1782338059434, + "aspa_objects": 2184, + "roa_count": 959716, + "atlas_asns_total": 4748, + "atlas_asns_with_aspa": 459, + "coverage_pct_atlas": 9.67, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-25", + "ts": 1782422879426, + "aspa_objects": 2194, + "roa_count": 961420, + "atlas_asns_total": 4749, + "atlas_asns_with_aspa": 465, + "coverage_pct_atlas": 9.79, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-26", + "ts": 1782507700593, + "aspa_objects": 2202, + "roa_count": 961846, + "atlas_asns_total": 4748, + "atlas_asns_with_aspa": 462, + "coverage_pct_atlas": 9.73, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-27", + "ts": 1782592519478, + "aspa_objects": 2208, + "roa_count": 962630, + "atlas_asns_total": 4746, + "atlas_asns_with_aspa": 459, + "coverage_pct_atlas": 9.67, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-28", + "ts": 1782677339653, + "aspa_objects": 2210, + "roa_count": 962824, + "atlas_asns_total": 4738, + "atlas_asns_with_aspa": 462, + "coverage_pct_atlas": 9.75, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-29", + "ts": 1782776296119, + "aspa_objects": 2218, + "roa_count": 963499, + "atlas_asns_total": 4749, + "atlas_asns_with_aspa": 462, + "coverage_pct_atlas": 9.73, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-30", + "ts": 1782861116475, + "aspa_objects": 2227, + "roa_count": 964524, + "atlas_asns_total": 4747, + "atlas_asns_with_aspa": 463, + "coverage_pct_atlas": 9.75, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-01", + "ts": 1782943528014, + "aspa_objects": 2234, + "roa_count": 965150, + "atlas_asns_total": 4747, + "atlas_asns_with_aspa": 470, + "coverage_pct_atlas": 9.9, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-02", + "ts": 1783029743491, + "aspa_objects": 2244, + "roa_count": 965634, + "atlas_asns_total": 4744, + "atlas_asns_with_aspa": 473, + "coverage_pct_atlas": 9.97, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-03", + "ts": 1783110319303, + "aspa_objects": 2253, + "roa_count": 965995, + "atlas_asns_total": 4739, + "atlas_asns_with_aspa": 478, + "coverage_pct_atlas": 10.09, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-04", + "ts": 1783195400105, + "aspa_objects": 2254, + "roa_count": 966049, + "atlas_asns_total": 4757, + "atlas_asns_with_aspa": 480, + "coverage_pct_atlas": 10.09, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-05", + "ts": 1783282307341, + "aspa_objects": 2264, + "roa_count": 966292, + "atlas_asns_total": 4740, + "atlas_asns_with_aspa": 483, + "coverage_pct_atlas": 10.19, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-06", + "ts": 1783368549946, + "aspa_objects": 2275, + "roa_count": 966360, + "atlas_asns_total": 4736, + "atlas_asns_with_aspa": 482, + "coverage_pct_atlas": 10.18, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-07", + "ts": 1783464285059, + "aspa_objects": 2286, + "roa_count": 967521, + "atlas_asns_total": 4747, + "atlas_asns_with_aspa": 483, + "coverage_pct_atlas": 10.17, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-08", + "ts": 1783550943346, + "aspa_objects": 2309, + "roa_count": 967933, + "atlas_asns_total": 4750, + "atlas_asns_with_aspa": 486, + "coverage_pct_atlas": 10.23, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-09", + "ts": 1783637598811, + "aspa_objects": 2324, + "roa_count": 969050, + "atlas_asns_total": 4759, + "atlas_asns_with_aspa": 492, + "coverage_pct_atlas": 10.34, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-10", + "ts": 1783724254815, + "aspa_objects": 2347, + "roa_count": 970180, + "atlas_asns_total": 4766, + "atlas_asns_with_aspa": 495, + "coverage_pct_atlas": 10.39, + "aspa_delta": 5, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-11", + "ts": 1783810912350, + "aspa_objects": 2352, + "roa_count": 970494, + "atlas_asns_total": 4765, + "atlas_asns_with_aspa": 495, + "coverage_pct_atlas": 10.39, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-12", + "ts": 1783897568710, + "aspa_objects": 2355, + "roa_count": 970426, + "atlas_asns_total": 4769, + "atlas_asns_with_aspa": 500, + "coverage_pct_atlas": 10.48, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-13", + "ts": 1783984224592, + "aspa_objects": 2361, + "roa_count": 970721, + "atlas_asns_total": 4780, + "atlas_asns_with_aspa": 505, + "coverage_pct_atlas": 10.56, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-14", + "ts": 1784071182188, + "aspa_objects": 2373, + "roa_count": 971705, + "atlas_asns_total": 0, + "atlas_asns_with_aspa": 0, + "coverage_pct_atlas": 0, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-15", + "ts": 1784159361526, + "aspa_objects": 2382, + "roa_count": 971732, + "atlas_asns_total": 4775, + "atlas_asns_with_aspa": 504, + "coverage_pct_atlas": 10.55, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-16", + "ts": 1784174057994, + "aspa_objects": 2382, + "roa_count": 971831, + "atlas_asns_total": 4775, + "atlas_asns_with_aspa": 504, + "coverage_pct_atlas": 10.55, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + } +] \ No newline at end of file diff --git a/audit/asn_pool.json b/audit/asn_pool.json new file mode 100644 index 0000000..72a9092 --- /dev/null +++ b/audit/asn_pool.json @@ -0,0 +1 @@ +[3, 26, 55, 57, 59, 72, 81, 87, 101, 109, 111, 160, 173, 174, 209, 210, 224, 226, 237, 271, 278, 286, 290, 297, 302, 376, 378, 549, 557, 558, 559, 577, 600, 668, 680, 701, 702, 703, 766, 786, 803, 812, 847, 849, 850, 852, 853, 854, 855, 887, 1121, 1133, 1213, 1239, 1248, 1251, 1290, 1299, 1304, 1312, 1351, 1406, 1408, 1424, 1547, 1645, 1657, 1659, 1668, 1741, 1764, 1785, 1835, 1850, 1853, 1880, 1916, 1930, 1982, 2047, 2108, 2110, 2116, 2134, 2152, 2153, 2200, 2381, 2470, 2497, 2499, 2500, 2514, 2516, 2518, 2519, 2523, 2527, 2529, 2549, 2552, 2572, 2593, 2598, 2602, 2611, 2614, 2647, 2685, 2686, 2687, 2688, 2698, 2711, 2721, 2722, 2818, 2828, 2847, 2848, 2852, 2854, 2856, 2857, 2863, 2906, 2907, 2914, 2915, 3064, 3128, 3164, 3209, 3213, 3215, 3216, 3238, 3255, 3257, 3262, 3267, 3280, 3292, 3300, 3302, 3303, 3320, 3327, 3344, 3356, 3401, 3450, 3464, 3479, 3480, 3484, 3491, 3512, 3549, 3561, 3582, 3599, 3602, 3605, 3630, 3662, 3676, 3677, 3701, 3737, 3741, 3742, 3754, 3807, 3937, 3999, 4007, 4134, 4136, 4150, 4181, 4201, 4224, 4250, 4258, 4306, 4319, 4355, 4385, 4436, 4508, 4528, 4538, 4557, 4565, 4589, 4600, 4610, 4617, 4621, 4628, 4637, 4641, 4648, 4651, 4652, 4657, 4666, 4682, 4691, 4704, 4711, 4713, 4716, 4725, 4739, 4741, 4750, 4761, 4764, 4766, 4769, 4773, 4775, 4787, 4788, 4796, 4800, 4818, 4826, 4837, 4844, 4851, 4901, 4927, 5050, 5071, 5078, 5089, 5111, 5118, 5385, 5390, 5391, 5397, 5400, 5404, 5409, 5410, 5413, 5430, 5432, 5462, 5464, 5467, 5503, 5507, 5511, 5521, 5524, 5533, 5541, 5563, 5564, 5577, 5578, 5580, 5587, 5588, 5603, 5605, 5650, 5661, 5664, 5669, 5683, 5692, 5726, 5738, 5739, 5764, 5769, 5786, 5794, 6057, 6059, 6066, 6067, 6079, 6082, 6083, 6102, 6122, 6130, 6169, 6181, 6231, 6295, 6315, 6320, 6327, 6336, 6366, 6379, 6405, 6407, 6435, 6447, 6453, 6456, 6459, 6473, 6509, 6536, 6539, 6582, 6619, 6623, 6648, 6656, 6661, 6666, 6667, 6677, 6679, 6695, 6724, 6730, 6734, 6738, 6762, 6777, 6779, 6805, 6807, 6830, 6850, 6854, 6871, 6895, 6900, 6903, 6908, 6910, 6911, 6922, 6939, 6983, 7018, 7034, 7065, 7091, 7132, 7270, 7276, 7296, 7303, 7332, 7342, 7385, 7386, 7415, 7459, 7473, 7475, 7477, 7481, 7496, 7506, 7521, 7522, 7529, 7530, 7539, 7545, 7568, 7575, 7583, 7595, 7597, 7598, 7610, 7629, 7631, 7660, 7670, 7671, 7682, 7707, 7717, 7738, 7752, 7772, 7782, 7784, 7829, 7843, 7850, 7862, 7896, 7908, 7922, 7968, 7992, 8001, 8014, 8015, 8047, 8075, 8092, 8121, 8148, 8167, 8190, 8195, 8201, 8222, 8224, 8226, 8262, 8276, 8282, 8302, 8308, 8309, 8339, 8342, 8343, 8359, 8365, 8368, 8374, 8399, 8400, 8402, 8404, 8419, 8422, 8447, 8468, 8469, 8481, 8486, 8487, 8491, 8495, 8508, 8517, 8518, 8529, 8535, 8544, 8546, 8550, 8553, 8554, 8560, 8565, 8582, 8587, 8596, 8607, 8608, 8612, 8613, 8631, 8657, 8664, 8676, 8677, 8681, 8689, 8708, 8714, 8717, 8723, 8732, 8744, 8758, 8763, 8764, 8769, 8781, 8784, 8788, 8804, 8820, 8839, 8844, 8851, 8859, 8865, 8873, 8879, 8881, 8893, 8896, 8897, 8902, 8903, 8912, 8916, 8926, 8928, 8966, 9002, 9008, 9017, 9031, 9033, 9036, 9044, 9050, 9070, 9085, 9092, 9111, 9119, 9120, 9121, 9132, 9143, 9145, 9150, 9153, 9167, 9177, 9191, 9198, 9211, 9244, 9246, 9253, 9264, 9266, 9269, 9290, 9293, 9297, 9299, 9304, 9313, 9327, 9331, 9333, 9354, 9355, 9363, 9381, 9433, 9437, 9443, 9446, 9497, 9498, 9503, 9504, 9505, 9534, 9560, 9563, 9592, 9595, 9605, 9622, 9658, 9661, 9681, 9710, 9723, 9738, 9741, 9748, 9749, 9797, 9821, 9877, 9892, 9908, 9916, 9924, 9928, 9930, 9957, 10013, 10021, 10026, 10030, 10075, 10098, 10133, 10255, 10297, 10310, 10326, 10364, 10391, 10411, 10430, 10448, 10466, 10474, 10490, 10565, 10566, 10578, 10594, 10631, 10674, 10678, 10725, 10780, 10835, 10848, 10881, 10886, 10925, 10929, 10933, 10961, 10965, 10967, 11030, 11051, 11071, 11164, 11170, 11174, 11179, 11190, 11242, 11266, 11274, 11279, 11399, 11403, 11456, 11537, 11546, 11556, 11602, 11608, 11622, 11643, 11664, 11666, 11686, 11714, 11726, 11739, 11758, 11798, 11814, 11827, 11839, 11841, 11893, 11994, 11995, 11998, 12008, 12025, 12041, 12059, 12083, 12111, 12130, 12148, 12189, 12198, 12200, 12220, 12229, 12236, 12284, 12290, 12301, 12306, 12310, 12312, 12316, 12322, 12329, 12337, 12347, 12348, 12350, 12360, 12362, 12381, 12389, 12390, 12496, 12510, 12519, 12551, 12552, 12566, 12574, 12577, 12611, 12615, 12617, 12625, 12635, 12654, 12676, 12678, 12684, 12687, 12695, 12703, 12713, 12714, 12731, 12786, 12833, 12835, 12854, 12859, 12874, 12902, 12906, 12956, 12969, 13005, 13030, 13037, 13039, 13054, 13094, 13105, 13122, 13132, 13135, 13147, 13184, 13189, 13193, 13213, 13237, 13238, 13246, 13249, 13284, 13285, 13301, 13303, 13331, 13332, 13335, 13354, 13360, 13370, 13371, 13412, 13414, 13445, 13446, 13489, 13538, 13571, 13646, 13649, 13657, 13679, 13680, 13692, 13720, 13722, 13768, 13770, 13826, 13838, 13868, 13870, 13871, 13878, 13890, 13917, 14007, 14041, 14043, 14116, 14129, 14166, 14211, 14232, 14234, 14280, 14282, 14295, 14307, 14333, 14340, 14361, 14366, 14371, 14390, 14413, 14432, 14442, 14445, 14453, 14492, 14585, 14609, 14630, 14712, 14717, 14746, 14793, 14824, 14833, 14866, 14891, 14928, 14939, 14969, 14970, 14989, 15037, 15041, 15092, 15095, 15101, 15133, 15149, 15169, 15179, 15211, 15224, 15247, 15248, 15256, 15290, 15296, 15301, 15348, 15366, 15388, 15398, 15399, 15422, 15434, 15435, 15436, 15463, 15469, 15479, 15497, 15517, 15533, 15535, 15542, 15562, 15589, 15598, 15600, 15614, 15645, 15657, 15669, 15670, 15685, 15692, 15701, 15703, 15716, 15725, 15739, 15743, 15763, 15766, 15772, 15782, 15802, 15814, 15830, 15879, 15915, 15925, 15933, 15935, 15960, 15994, 16030, 16080, 16082, 16096, 16097, 16153, 16164, 16186, 16210, 16245, 16276, 16298, 16316, 16347, 16350, 16371, 16402, 16414, 16486, 16509, 16523, 16531, 16559, 16569, 16586, 16713, 16773, 16810, 16815, 16839, 16880, 16960, 17088, 17106, 17116, 17151, 17169, 17303, 17346, 17374, 17409, 17420, 17435, 17444, 17451, 17477, 17498, 17501, 17514, 17534, 17547, 17579, 17645, 17666, 17676, 17685, 17716, 17717, 17824, 17895, 17924, 17939, 17955, 17961, 17978, 18021, 18052, 18054, 18059, 18070, 18077, 18092, 18101, 18104, 18106, 18121, 18126, 18134, 18149, 18150, 18268, 18282, 18378, 18392, 18403, 18422, 18450, 18480, 18505, 18508, 18541, 18588, 18607, 18682, 18705, 18734, 18740, 18747, 18779, 18804, 18915, 18922, 19029, 19035, 19089, 19108, 19151, 19159, 19165, 19171, 19181, 19189, 19207, 19214, 19228, 19255, 19297, 19318, 19468, 19475, 19527, 19528, 19607, 19662, 19679, 19740, 19750, 19752, 19763, 19782, 19783, 19835, 19842, 19875, 19996, 20093, 20115, 20119, 20130, 20161, 20191, 20218, 20225, 20312, 20483, 20485, 20495, 20500, 20501, 20504, 20507, 20530, 20547, 20555, 20559, 20569, 20621, 20632, 20633, 20634, 20640, 20647, 20653, 20672, 20676, 20704, 20712, 20715, 20717, 20718, 20759, 20773, 20799, 20815, 20847, 20857, 20860, 20886, 20893, 20899, 20915, 20917, 20924, 20940, 20953, 20965, 20969, 20976, 20984, 20985, 21011, 21013, 21020, 21056, 21069, 21099, 21132, 21155, 21159, 21161, 21176, 21193, 21195, 21202, 21219, 21221, 21230, 21232, 21263, 21336, 21345, 21385, 21392, 21396, 21409, 21476, 21513, 21525, 21570, 21581, 21623, 21637, 21640, 21709, 21724, 21740, 21788, 21844, 21864, 21927, 21947, 21968, 21976, 21980, 22004, 22047, 22059, 22103, 22122, 22243, 22300, 22334, 22356, 22384, 22512, 22518, 22546, 22556, 22561, 22612, 22637, 22652, 22663, 22691, 22742, 22773, 22781, 22829, 22834, 22845, 22919, 22927, 22957, 22964, 22989, 22995, 23005, 23028, 23033, 23074, 23128, 23140, 23162, 23169, 23171, 23265, 23284, 23292, 23308, 23310, 23320, 23342, 23393, 23452, 23473, 23483, 23498, 23504, 23520, 23640, 23655, 23661, 23677, 23700, 23752, 23783, 23815, 23816, 23820, 23829, 23864, 23899, 23930, 23932, 23944, 23947, 23962, 23967, 24029, 24064, 24077, 24093, 24095, 24115, 24129, 24167, 24193, 24203, 24218, 24263, 24284, 24313, 24321, 24388, 24398, 24457, 24470, 24508, 24514, 24541, 24557, 24582, 24586, 24607, 24642, 24679, 24724, 24753, 24851, 24867, 24875, 24889, 24904, 24916, 24940, 24951, 24958, 24961, 24971, 24973, 25041, 25048, 25061, 25068, 25074, 25083, 25084, 25091, 25093, 25108, 25111, 25124, 25151, 25180, 25182, 25192, 25220, 25229, 25260, 25279, 25286, 25308, 25309, 25310, 25358, 25369, 25384, 25394, 25433, 25443, 25466, 25473, 25478, 25504, 25525, 25560, 25577, 25588, 25593, 25595, 25596, 25649, 25668, 25689, 25700, 25720, 25736, 25752, 25761, 25780, 25795, 25818, 25899, 25975, 25976, 26026, 26088, 26108, 26156, 26162, 26163, 26167, 26169, 26193, 26228, 26268, 26282, 26309, 26320, 26343, 26347, 26389, 26458, 26468, 26496, 26546, 26549, 26554, 26563, 26610, 26622, 26627, 26667, 26677, 26679, 26700, 26769, 26779, 26785, 26788, 26790, 26803, 26806, 26838, 26871, 26888, 26914, 26918, 26930, 26935, 26968, 26972, 27008, 27198, 27257, 27259, 27281, 27323, 27325, 27400, 27420, 27471, 27475, 27552, 27589, 27632, 27647, 27678, 27750, 27781, 27790, 27817, 27822, 27924, 27926, 27970, 27974, 28001, 28068, 28107, 28109, 28130, 28138, 28166, 28267, 28275, 28283, 28299, 28338, 28360, 28571, 28573, 28580, 28614, 28624, 28666, 28685, 28707, 28747, 28753, 28760, 28838, 28846, 28855, 28859, 28878, 28889, 28908, 28917, 28929, 28931, 28978, 29001, 29006, 29009, 29014, 29017, 29028, 29066, 29075, 29076, 29092, 29119, 29131, 29141, 29169, 29215, 29243, 29246, 29260, 29266, 29298, 29301, 29305, 29329, 29396, 29404, 29422, 29430, 29452, 29465, 29468, 29471, 29479, 29484, 29488, 29512, 29518, 29542, 29551, 29584, 29590, 29605, 29611, 29616, 29636, 29655, 29668, 29676, 29691, 29737, 29748, 29752, 29846, 29848, 29877, 29881, 29944, 29965, 29990, 30010, 30041, 30063, 30071, 30092, 30094, 30162, 30212, 30257, 30295, 30340, 30361, 30365, 30373, 30422, 30480, 30539, 30583, 30708, 30727, 30736, 30746, 30751, 30781, 30803, 30811, 30827, 30880, 30890, 30914, 30919, 30925, 30961, 30962, 30971, 30983, 30997, 31019, 31025, 31027, 31078, 31147, 31210, 31242, 31252, 31328, 31334, 31337, 31383, 31402, 31424, 31449, 31458, 31459, 31474, 31477, 31530, 31555, 31562, 31564, 31576, 31580, 31641, 31653, 31673, 31688, 31708, 31712, 31715, 31727, 31736, 31898, 31960, 31972, 31976, 32016, 32082, 32098, 32105, 32165, 32184, 32200, 32244, 32272, 32299, 32329, 32397, 32402, 32432, 32440, 32522, 32536, 32546, 32590, 32592, 32613, 32639, 32726, 32727, 32740, 32748, 32751, 32764, 32787, 32801, 32869, 32880, 32881, 32903, 32934, 32952, 33011, 33083, 33103, 33108, 33130, 33132, 33139, 33182, 33211, 33258, 33309, 33339, 33353, 33419, 33445, 33470, 33472, 33495, 33522, 33529, 33554, 33612, 33713, 33739, 33791, 33811, 33845, 33864, 33885, 33891, 33915, 33920, 33941, 33958, 33965, 33968, 33970, 34086, 34087, 34106, 34108, 34119, 34123, 34135, 34141, 34144, 34146, 34171, 34177, 34197, 34224, 34244, 34245, 34288, 34304, 34305, 34307, 34309, 34362, 34388, 34407, 34419, 34456, 34523, 34549, 34553, 34554, 34555, 34568, 34578, 34594, 34606, 34623, 34655, 34659, 34688, 34706, 34746, 34762, 34764, 34772, 34781, 34803, 34848, 34878, 34899, 34912, 34928, 34931, 34960, 34968, 35000, 35028, 35053, 35070, 35136, 35137, 35152, 35180, 35184, 35193, 35206, 35217, 35223, 35228, 35237, 35260, 35283, 35320, 35332, 35393, 35407, 35415, 35425, 35470, 35548, 35551, 35559, 35574, 35579, 35584, 35592, 35647, 35655, 35676, 35706, 35708, 35717, 35733, 35742, 35768, 35788, 35833, 35836, 35843, 35857, 35889, 35908, 35916, 35920, 35949, 35985, 35998, 36008, 36040, 36086, 36089, 36090, 36112, 36167, 36168, 36171, 36184, 36217, 36324, 36343, 36351, 36387, 36388, 36416, 36423, 36446, 36470, 36472, 36561, 36653, 36683, 36692, 36696, 36715, 36737, 36805, 36815, 36816, 36824, 36856, 36859, 36943, 36944, 36946, 36997, 37028, 37044, 37062, 37084, 37113, 37179, 37182, 37222, 37224, 37235, 37256, 37286, 37288, 37299, 37312, 37314, 37324, 37383, 37420, 37481, 37495, 37520, 37580, 37651, 37652, 37704, 37707, 37710, 37716, 37718, 37728, 37735, 37769, 37774, 37775, 37777, 37780, 37781, 37786, 37791, 37793, 37794, 37796, 37799, 37803, 37887, 37968, 37971, 37986, 37996, 38016, 38022, 38060, 38082, 38137, 38149, 38175, 38194, 38208, 38220, 38240, 38280, 38310, 38321, 38322, 38425, 38456, 38478, 38541, 38544, 38639, 38719, 38759, 38781, 38808, 38809, 38812, 38858, 38883, 38927, 38948, 38955, 39020, 39040, 39093, 39102, 39104, 39145, 39176, 39192, 39202, 39256, 39287, 39301, 39309, 39319, 39326, 39373, 39386, 39392, 39449, 39451, 39458, 39519, 39520, 39545, 39551, 39583, 39591, 39600, 39607, 39615, 39621, 39628, 39647, 39650, 39651, 39704, 39721, 39737, 39783, 39832, 39905, 39923, 39944, 40009, 40041, 40048, 40064, 40068, 40115, 40119, 40191, 40193, 40216, 40220, 40300, 40387, 40426, 40428, 40444, 40449, 40475, 40495, 40511, 40542, 40581, 40592, 40604, 40752, 40779, 40823, 40867, 40981, 41000, 41012, 41029, 41037, 41059, 41075, 41088, 41139, 41157, 41160, 41194, 41230, 41255, 41313, 41349, 41357, 41399, 41412, 41471, 41489, 41529, 41552, 41599, 41601, 41617, 41644, 41653, 41659, 41678, 41690, 41693, 41721, 41731, 41853, 41882, 41883, 41887, 41913, 41960, 42004, 42005, 42018, 42044, 42064, 42090, 42093, 42109, 42184, 42204, 42310, 42337, 42353, 42369, 42403, 42416, 42455, 42456, 42473, 42476, 42492, 42543, 42579, 42585, 42587, 42596, 42604, 42605, 42610, 42612, 42615, 42638, 42669, 42708, 42755, 42896, 42973, 42981, 43013, 43074, 43100, 43154, 43198, 43252, 43268, 43284, 43339, 43350, 43355, 43376, 43388, 43407, 43436, 43509, 43513, 43515, 43524, 43545, 43561, 43565, 43573, 43708, 43727, 43729, 43760, 43843, 43911, 43939, 43948, 44009, 44050, 44066, 44123, 44133, 44134, 44146, 44219, 44237, 44295, 44303, 44432, 44444, 44488, 44514, 44515, 44527, 44574, 44581, 44583, 44596, 44646, 44681, 44706, 44757, 44763, 44788, 44896, 44916, 44919, 44935, 44946, 45012, 45014, 45031, 45037, 45047, 45133, 45144, 45304, 45340, 45352, 45411, 45430, 45444, 45483, 45494, 45500, 45589, 45629, 45642, 45668, 45671, 45679, 45686, 45705, 45711, 45729, 45768, 45773, 45896, 45942, 45950, 46015, 46044, 46049, 46110, 46130, 46136, 46155, 46156, 46177, 46195, 46199, 46235, 46261, 46309, 46337, 46373, 46389, 46484, 46489, 46500, 46609, 46656, 46786, 46793, 46851, 46907, 47065, 47138, 47143, 47172, 47192, 47195, 47200, 47207, 47214, 47215, 47228, 47302, 47316, 47318, 47328, 47340, 47344, 47377, 47416, 47422, 47443, 47447, 47473, 47480, 47490, 47498, 47528, 47541, 47559, 47617, 47627, 47708, 47764, 47836, 47841, 47856, 47869, 47872, 47915, 47999, 48052, 48061, 48072, 48136, 48145, 48173, 48193, 48200, 48237, 48285, 48292, 48297, 48344, 48348, 48355, 48443, 48461, 48484, 48514, 48564, 48716, 48793, 48835, 48918, 48961, 48971, 48973, 49134, 49190, 49205, 49232, 49249, 49349, 49375, 49378, 49405, 49416, 49432, 49459, 49463, 49489, 49544, 49572, 49594, 49604, 49621, 49624, 49625, 49634, 49690, 49706, 49745, 49766, 49813, 49831, 49854, 49869, 49904, 49917, 49964, 50043, 50066, 50072, 50087, 50088, 50113, 50148, 50152, 50188, 50210, 50234, 50245, 50287, 50292, 50295, 50328, 50329, 50384, 50469, 50507, 50515, 50534, 50572, 50620, 50737, 50763, 50821, 50837, 50841, 50857, 50926, 50963, 50999, 51025, 51159, 51164, 51198, 51218, 51224, 51225, 51243, 51257, 51290, 51370, 51391, 51458, 51483, 51514, 51530, 51559, 51605, 51701, 51706, 51708, 51795, 51900, 51906, 51930, 51941, 52005, 52041, 52102, 52160, 52161, 52186, 52188, 52291, 52314, 52411, 52424, 52442, 52462, 52465, 52467, 52550, 52652, 52841, 52863, 52888, 52892, 52928, 52998, 53020, 53040, 53072, 53078, 53107, 53164, 53166, 53187, 53235, 53389, 53404, 53441, 53563, 53582, 53649, 53758, 53767, 53787, 53837, 53841, 53871, 53901, 53922, 53952, 53988, 54033, 54042, 54044, 54098, 54144, 54299, 54300, 54380, 54386, 54415, 54444, 54537, 54652, 54661, 54666, 54716, 54769, 55028, 55043, 55064, 55182, 55219, 55394, 55470, 55518, 55569, 55651, 55680, 55720, 55822, 55884, 55941, 56056, 56123, 56156, 56199, 56308, 56393, 56507, 56549, 56704, 56755, 56809, 56843, 56848, 56853, 56858, 56890, 56931, 57106, 57127, 57162, 57169, 57202, 57228, 57355, 57388, 57409, 57423, 57455, 57497, 57555, 57665, 57757, 57802, 57860, 57879, 57891, 57907, 57932, 57936, 57967, 58032, 58069, 58119, 58146, 58171, 58226, 58280, 58299, 58436, 58457, 58500, 58560, 58631, 58708, 58793, 58894, 58901, 58941, 58942, 58943, 59099, 59128, 59200, 59360, 59369, 59374, 59395, 59428, 59432, 59445, 59510, 59552, 59613, 59624, 59626, 59780, 59808, 59899, 59956, 59988, 60187, 60430, 60438, 60602, 60662, 60710, 60763, 60917, 61020, 61126, 61190, 61195, 61201, 61229, 61283, 61300, 61349, 61374, 61399, 61409, 61417, 61468, 61522, 61524, 61525, 61526, 61571, 61582, 61602, 61656, 61721, 61749, 61968, 62000, 62075, 62182, 62217, 62228, 62230, 62469, 62484, 62499, 62502, 62532, 62537, 62580, 62595, 62618, 62698, 62708, 62728, 62752, 62760, 62768, 62802, 62982, 62993, 63028, 63034, 63055, 63080, 63086, 63124, 63126, 63157, 63203, 63212, 63221, 63287, 63402, 63529, 63538, 63554, 63602, 63771, 63781, 63832, 63839, 64006, 64132, 64140, 64141, 64142, 64143, 64144, 64145, 64147, 64148, 64149, 64154, 64157, 64163, 64166, 64169, 64170, 64214, 64215, 64216, 64219, 64220, 64221, 64222, 64234, 64255, 131203, 131248, 131357, 131475, 131917, 132003, 132111, 132123, 132205, 132213, 132331, 132519, 132531, 132679, 132696, 132734, 132917, 132921, 132971, 133077, 133086, 133120, 133160, 133253, 133318, 133420, 133498, 133555, 133616, 133742, 133802, 133827, 133846, 133930, 134121, 134148, 134149, 134227, 134995, 135134, 135294, 135309, 135337, 135382, 135526, 135639, 135772, 136430, 136470, 136612, 136669, 136779, 136786, 136968, 137183, 137219, 137295, 137399, 137527, 138066, 138460, 138507, 138632, 138650, 138946, 138968, 139024, 139075, 139216, 139299, 139677, 139912, 139970, 140307, 140684, 140731, 140868, 141182, 141189, 141539, 141703, 141809, 141810, 141949, 142140, 142141, 146757, 146978, 147064, 147214, 149003, 149008, 149918, 150190, 150220, 150268, 150355, 150388, 150528, 151376, 151377, 151829, 152007, 152587, 153784, 154034, 154418, 196670, 196689, 196816, 197099, 197157, 197413, 197439, 197451, 197473, 197518, 197541, 197692, 197696, 197804, 197833, 197915, 197964, 197965, 198026, 198116, 198239, 198249, 198250, 198334, 198423, 198591, 198610, 198611, 199188, 199422, 199544, 199594, 199673, 199706, 199957, 200001, 200089, 200117, 200134, 200225, 200273, 200300, 200334, 200365, 200490, 200608, 200623, 200652, 200759, 200779, 200800, 200971, 200981, 201026, 201061, 201155, 201193, 201236, 201462, 201526, 201537, 201560, 201561, 201639, 201687, 201764, 201782, 201900, 202030, 202056, 202096, 202196, 202409, 202418, 202559, 202562, 202782, 202806, 202928, 202932, 203031, 203112, 203168, 203221, 203341, 203405, 203434, 203500, 203507, 203520, 203524, 203724, 203939, 203994, 204034, 204179, 204207, 204258, 204438, 204506, 204526, 204642, 204663, 204680, 204682, 204867, 204921, 204930, 204982, 205036, 205082, 205117, 205152, 205165, 205272, 205323, 205357, 205415, 205474, 205494, 205530, 205555, 205641, 205651, 205681, 205728, 205790, 205818, 205909, 205964, 206102, 206122, 206125, 206130, 206161, 206165, 206221, 206226, 206342, 206446, 206477, 206506, 206628, 206720, 206754, 206780, 206970, 207076, 207080, 207141, 207149, 207195, 207334, 207337, 207414, 207427, 207454, 207468, 207491, 207515, 207563, 207564, 207632, 207649, 207721, 207740, 207800, 207803, 207834, 207910, 207926, 207948, 207965, 208059, 208460, 208523, 208618, 208698, 208755, 208814, 208993, 209098, 209164, 209209, 209300, 209421, 209432, 209752, 209762, 210025, 210461, 210586, 210925, 211100, 211521, 211539, 211764, 211877, 211942, 211947, 212100, 212262, 212557, 212674, 212723, 212914, 212921, 212982, 213007, 213033, 213045, 213185, 213234, 213236, 213253, 213262, 213279, 213330, 213350, 213352, 213366, 213386, 213409, 213536, 213687, 213791, 213863, 213874, 214639, 215353, 215405, 215693, 215791, 216407, 262237, 262266, 262306, 262413, 262441, 262446, 262548, 262572, 262590, 262614, 262666, 262667, 262891, 262968, 263076, 263212, 263229, 263235, 263500, 263702, 263716, 264141, 264324, 264427, 264471, 264555, 264608, 264630, 264785, 264815, 264893, 264957, 264958, 265392, 265811, 265932, 266031, 267300, 267445, 267507, 267535, 267703, 271656, 271801, 271885, 272199, 272394, 272395, 272696, 272852, 273165, 274682, 274703, 274739, 274751, 327687, 327700, 327705, 327724, 327788, 327942, 328119, 328156, 328363, 328419, 329178, 393280, 393290, 393316, 393350, 393420, 393430, 393470, 393513, 393523, 393752, 393874, 393891, 393907, 394119, 394149, 394337, 394427, 394429, 394488, 394514, 394574, 394594, 394739, 394744, 394957, 395080, 395081, 395097, 395126, 395326, 395383, 395400, 395434, 395460, 395878, 396302, 396471, 397990, 398065, 399280] \ No newline at end of file diff --git a/audit/daily_audit.py b/audit/daily_audit.py new file mode 100755 index 0000000..d5bce1a --- /dev/null +++ b/audit/daily_audit.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python3 +""" +PeerCortex Final Quality Audit v4 +Tests 103 ASNs against v0.6.7 (running, stable) +Uses cached responses where available, skips ASNs that don't respond in 15s +Cross-validates: prefix counts, RPKI math, IX dedup, facilities, RIR, country +""" +import json, urllib.request, time, sys +from datetime import datetime, timezone + +def fetch(url, timeout=15): + try: + req = urllib.request.Request(url, headers={"User-Agent": "PeerCortex-Audit/4.0"}) + with urllib.request.urlopen(req, timeout=timeout) as r: + return json.loads(r.read()) + except Exception as e: + return None + +ASNS = [ + 1, 174, 714, 1299, 2497, 2516, 2906, 3257, 3303, 3320, 3356, + 4134, 4766, 5089, 5483, 5511, 6057, 6128, 6147, 6453, 6695, + 6762, 6830, 6939, 7018, 7473, 7545, 7922, 8075, 8151, 8220, + 8422, 8708, 9121, 9304, 9318, 9498, 10429, 10474, 10796, 12479, + 12714, 12956, 13237, 13335, 14080, 15133, 15169, 15600, 15704, + 16276, 16509, 17676, 18403, 19281, 20115, 20562, 20932, 20940, + 21928, 22773, 22822, 23106, 24115, 24429, 24940, 24961, 25091, + 29049, 32934, 33891, 34465, 34549, 35369, 37100, 38001, 39122, + 41327, 42, 42739, 43350, 43996, 44574, 45899, 47692, 48159, + 50629, 51088, 54113, 56630, 57695, 58057, 59947, 60068, 60501, + 62240, 64271, 132335, 136907, 137409, 139070, 197540, 199121, +] + +results = {"ok": 0, "warn": 0, "crit": 0, "skip": 0, "total": len(ASNS)} +all_issues = [] +responded = [] + +print(f"PeerCortex Final Audit v4 — {datetime.now(timezone.utc).isoformat()}") +print(f"Target: http://localhost:3101 | ASNs: {len(ASNS)}") +print("=" * 75) + +for i, asn in enumerate(ASNS): + sys.stdout.write(f"\r [{i+1:3d}/{len(ASNS)}] AS{asn}... ") + sys.stdout.flush() + + d = fetch(f"http://localhost:3101/api/lookup?asn={asn}", timeout=15) + if not d or "network" not in d or d.get("error"): + results["skip"] += 1 + continue + + responded.append(asn) + n = d.get("network", {}) + p = d.get("prefixes", {}) + r = d.get("rpki", {}) + ix = d.get("ix_presence", {}) + fac = d.get("facilities", {}) + meta= d.get("meta", {}) + reg = d.get("registration", {}) + + issues = [] + + # ── Math checks ───────────────────────────────────────── + if p.get("ipv4", 0) + p.get("ipv6", 0) != p.get("total", -1): + issues.append(("CRITICAL", "prefix_math", + f"v4({p.get('ipv4')})+v6({p.get('ipv6')})={p.get('ipv4',0)+p.get('ipv6',0)} ≠ total({p.get('total')})")) + + rpki_sum = r.get("valid",0) + r.get("invalid",0) + r.get("not_found",0) + if rpki_sum != r.get("checked", 0): + issues.append(("CRITICAL", "rpki_sum", + f"{rpki_sum} ≠ checked({r.get('checked')})")) + + if r.get("checked", 0) > 0: + exp = round(r.get("valid",0) / r.get("checked") * 100) + if abs(exp - r.get("coverage_percent", 0)) > 1: + issues.append(("CRITICAL", "rpki_pct", + f"expected {exp}% got {r.get('coverage_percent')}%")) + + conns = ix.get("connections", []) + dedup = len(set(c.get("ix_id") for c in conns if c.get("ix_id"))) + if dedup != ix.get("unique_ixps", 0): + issues.append(("CRITICAL", "ix_dedup", + f"dedup={dedup} ≠ unique_ixps={ix.get('unique_ixps')}")) + + if len(conns) != ix.get("total_connections", 0): + issues.append(("WARNING", "ix_total", + f"len={len(conns)} ≠ total_connections={ix.get('total_connections')}")) + + if len(fac.get("list",[])) != fac.get("total", 0): + issues.append(("WARNING", "fac_total", + f"len={len(fac.get('list',[]))} ≠ total={fac.get('total')}")) + + # ── Mandatory fields ───────────────────────────────────── + if not n.get("name") or n.get("name") == "Unknown": + issues.append(("CRITICAL", "name_empty", f"name={n.get('name')!r}")) + + if not n.get("asn"): + issues.append(("CRITICAL", "asn_empty", "ASN field missing")) + + if not n.get("rir") and not reg.get("rir"): + issues.append(("WARNING", "rir_empty", f"rir empty, country={n.get('country')!r}")) + + if not n.get("country"): + issues.append(("WARNING", "country_empty", "country field empty")) + + if meta.get("version") != "0.6.7": + issues.append(("WARNING", "version", f"got {meta.get('version')}")) + + # ── Categorize ─────────────────────────────────────────── + crits = [x for x in issues if x[0] == "CRITICAL"] + warns = [x for x in issues if x[0] == "WARNING"] + + if crits: + results["crit"] += 1 + elif warns: + results["warn"] += 1 + else: + results["ok"] += 1 + + if issues: + all_issues.append((asn, n.get("name","?"), issues, + p.get("total"), r.get("coverage_percent"), + ix.get("total_connections"), fac.get("total"), + n.get("rir"), n.get("country"))) + +print(f"\r Done. {len(responded)} responded, {results['skip']} skipped. ") + +print() +print("=" * 75) +print(f"FINAL AUDIT SUMMARY — {len(responded)} ASNs responded ({results['skip']} timed out)") +print("=" * 75) +print(f" ✓ PERFECT (zero issues): {results['ok']:3d}") +print(f" ⚠ WARNING only: {results['warn']:3d}") +print(f" ✗ CRITICAL: {results['crit']:3d}") +print(f" ⏭ Skipped (no response): {results['skip']:3d}") + +if results["crit"] == 0: + print("\n ✅ NO CRITICAL DATA ERRORS IN ANY RESPONDED ASN") + +# Per-category counts +warn_counts = {} +crit_counts = {} +for _, _, issues, *_ in all_issues: + for sev, field, _ in issues: + if sev == "CRITICAL": + crit_counts[field] = crit_counts.get(field, 0) + 1 + else: + warn_counts[field] = warn_counts.get(field, 0) + 1 + +if crit_counts: + print("\n CRITICAL by field:") + for f, c in sorted(crit_counts.items(), key=lambda x: -x[1]): + print(f" {f:35s}: {c} ASNs") + +if warn_counts: + print("\n WARNING by field:") + for f, c in sorted(warn_counts.items(), key=lambda x: -x[1]): + print(f" {f:35s}: {c} ASNs") + +# Detail for any issues +if all_issues: + print("\n DETAILS:") + for asn, name, issues, pfx, rpki_pct, ix_cnt, fac_cnt, rir, cc in all_issues: + for sev, field, msg in issues: + print(f" [{sev[:4]}] AS{asn:>7} | {field:30s} | {msg[:60]}") + +print() +print(" SAMPLE DATA (responded ASNs):") +print(f" {'ASN':>8} {'Name':24s} {'RIR':>6} {'CC':>3} {'Pfx':>5} {'RPKI%':>6} {'IX':>4} {'Fac':>4}") +print(f" {'-'*70}") +for asn in responded[:25]: + d = fetch(f"http://localhost:3101/api/lookup?asn={asn}", timeout=5) + if not d: continue + n=d.get("network",{}); p=d.get("prefixes",{}); r=d.get("rpki",{}); ix=d.get("ix_presence",{}); fac=d.get("facilities",{}) + print(f" AS{asn:>6} {n.get('name','?')[:22]:24s} {n.get('rir','?'):>6} {n.get('country','?'):>3} {p.get('total',0):>5} {r.get('coverage_percent',0):>5}% {ix.get('total_connections',0):>4} {fac.get('total',0):>4}") + +print() +print(f"Audit complete: {datetime.now(timezone.utc).isoformat()}") diff --git a/audit/rotating_audit.py b/audit/rotating_audit.py new file mode 100644 index 0000000..41e7785 --- /dev/null +++ b/audit/rotating_audit.py @@ -0,0 +1,270 @@ +#!/usr/bin/env python3 +""" +PeerCortex Rotating Daily Audit +- Pool of 500+ ASNs +- Each day: deterministic 100-ASN selection (seeded by date → reproducible, never same day twice) +- Each ASN: PeerCortex response cross-validated against RIPE Stat + PeeringDB externally +- Math checks: prefix sums, RPKI sums, IX dedup, facility counts +- Results saved to /var/log/peercortex/audit-YYYY-MM-DD.json +""" +import json, urllib.request, urllib.error, time, sys, os +from datetime import datetime, timezone +from hashlib import sha256 + +# ── ASN Pool (500+ diverse networks across all RIRs) ────────────────────────── +ASN_POOL = [ + # Tier-1 / Large Transit + 1, 174, 209, 286, 701, 702, 1239, 1273, 1280, 1299, 2914, 3257, 3320, + 3356, 3491, 3549, 3561, 4134, 4637, 4657, 5511, 6453, 6461, 6762, 6830, + 7018, 7473, 7922, 8220, 8928, 9002, 9304, 12956, 13030, + # Cloud / Hyperscaler + 714, 2906, 8075, 13335, 15169, 16509, 16591, 20940, 21342, 32934, 36351, + 54113, 136907, 14061, 19604, 63949, 22616, + # European ISPs + 1257, 1853, 2119, 2603, 3209, 3215, 3216, 3233, 3243, 3269, 3292, 3301, + 3303, 3308, 3327, 5089, 5390, 5432, 5483, 6057, 6128, 6147, 6695, 6728, + 6830, 6939, 8220, 8359, 8400, 8422, 8447, 8468, 8473, 8551, 8708, 9121, + 9145, 9158, 12714, 13237, 15435, 15547, 15600, 15692, 15830, 16276, + 20562, 20932, 21202, 24940, 24961, 25091, 28716, 29049, 29208, 33891, + 34465, 34549, 35369, 39122, 41327, 42, 42739, 43350, 47692, 48159, + 50629, 51088, 58057, 197540, 199121, + # APNIC + 2497, 2516, 4766, 7545, 9318, 9498, 17676, 18403, 23969, 24115, 38001, + 45899, 55836, 132335, 136907, 137409, 139070, 4713, 9269, 17488, 23944, + 38197, 45352, 63927, 131090, 133481, 134762, 137718, 149440, + # ARIN + 701, 1239, 1280, 2828, 3549, 3561, 6128, 6939, 7018, 7922, 10429, 10796, + 11427, 13977, 14080, 15133, 19281, 20115, 20325, 21928, 22773, 22822, + 23106, 32934, 33070, 35911, 36351, 40191, 43996, 54113, 62240, 64271, + 393398, 11404, 14618, 14593, 7046, 26101, 10310, 32590, + # LACNIC + 6147, 8167, 10429, 10474, 11419, 11644, 14080, 18881, 22927, 23106, + 28573, 52320, 53013, 61832, 262589, 263702, + # AFRINIC + 10474, 12091, 23889, 24835, 30844, 36864, 36903, 37100, 37271, 37468, + 55330, 327814, + # IXPs / Route Servers + 6695, 24115, 34307, 42476, 43366, 47498, 56393, + # CDN / Hosting + 2906, 8100, 13335, 15133, 16509, 20940, 22822, 24429, 46489, 54113, + 60068, 60501, 62240, 64271, 132335, + # Security / DNS + 19281, 15169, 13335, 714, 20473, + # Mixed / Small + 29791, 34224, 35332, 39386, 41695, 42473, 44574, 47065, 48858, 50300, + 56630, 57695, 58057, 59947, 60068, 60501, 63023, 64271, 132335, + # More European + 1200, 2611, 3265, 5388, 5430, 5444, 6128, 8309, 8365, 8560, 8607, + 9009, 12897, 13285, 15516, 16150, 20738, 21263, 24586, 24875, 25369, + 28917, 29017, 30036, 30781, 31025, 31400, 33986, 34006, 34224, 34655, + 35432, 39386, 39737, 41327, 41552, 42652, 43531, 44574, 47065, + # Telcos worldwide + 2516, 3320, 3786, 4766, 4800, 5483, 7473, 8151, 8708, 9121, 9304, + 9318, 9498, 10429, 12479, 12714, 15704, 16276, 17676, 18403, 22773, +] +# Deduplicate while preserving order +seen = set() +ASN_POOL_DEDUP = [x for x in ASN_POOL if not (x in seen or seen.add(x))] + +def load_pool(): + """Load ASN pool from file, fall back to built-in list.""" + pool_file = os.path.join(os.path.dirname(__file__), 'asn_pool.json') + try: + with open(pool_file) as f: + return json.load(f) + except: + return ASN_POOL_DEDUP + +def select_daily_asns(date_str, count=100): + """Deterministic daily selection — same date always gives same 100 ASNs.""" + import random + pool = load_pool() + seed = int(sha256(date_str.encode()).hexdigest(), 16) + rng = random.Random(seed) + rng.shuffle(pool) + return sorted(pool[:count]) + +def fetch(url, timeout=12): + try: + req = urllib.request.Request(url, headers={"User-Agent": "PeerCortex-Audit/5.0"}) + with urllib.request.urlopen(req, timeout=timeout) as r: + return json.loads(r.read()) + except: + return None + +def fetch_pc(asn, timeout=20): + try: + with urllib.request.urlopen(f"http://localhost:3101/api/lookup?asn={asn}", timeout=timeout) as r: + return json.loads(r.read()) + except: + return None + +def audit_asn(asn): + issues = [] + result = {"asn": asn, "status": "ok", "issues": [], "data": {}} + + # ── 1. PeerCortex response ─────────────────────────────────────────────── + d = fetch_pc(asn) + if not d or "network" not in d or d.get("error"): + result["status"] = "skip" + result["issues"].append(("SKIP", "no_response", "PeerCortex did not respond")) + return result + + n = d.get("network", {}) + p = d.get("prefixes", {}) + r = d.get("rpki", {}) + ix = d.get("ix_presence", {}) + fac = d.get("facilities", {}) + meta= d.get("meta", {}) + + result["data"] = { + "name": n.get("name"), + "rir": n.get("rir"), + "cc": n.get("country"), + "pfx_total": p.get("total", 0), + "rpki_pct": r.get("coverage_percent", 0), + "ix_cnt": ix.get("total_connections", 0), + "fac_cnt": fac.get("total", 0), + "version": meta.get("version"), + } + + # ── 2. Math checks (internal consistency) ─────────────────────────────── + if p.get("ipv4", 0) + p.get("ipv6", 0) != p.get("total", -1): + issues.append(("CRITICAL", "prefix_math", + f"v4({p.get('ipv4')})+v6({p.get('ipv6')}) ≠ total({p.get('total')})")) + + rpki_sum = r.get("valid", 0) + r.get("invalid", 0) + r.get("not_found", 0) + if rpki_sum != r.get("checked", 0): + issues.append(("CRITICAL", "rpki_sum", + f"{rpki_sum} ≠ checked({r.get('checked')})")) + + if r.get("checked", 0) > 0: + exp = round(r.get("valid", 0) / r.get("checked") * 100) + if abs(exp - r.get("coverage_percent", 0)) > 1: + issues.append(("CRITICAL", "rpki_pct", + f"expected {exp}% got {r.get('coverage_percent')}%")) + + conns = ix.get("connections", []) + dedup = len(set(c.get("ix_id") for c in conns if c.get("ix_id"))) + if dedup != ix.get("unique_ixps", 0): + issues.append(("CRITICAL", "ix_dedup", + f"dedup={dedup} ≠ unique_ixps={ix.get('unique_ixps')}")) + + if len(conns) != ix.get("total_connections", 0): + issues.append(("WARNING", "ix_total", + f"len={len(conns)} ≠ total_connections={ix.get('total_connections')}")) + + if len(fac.get("list", [])) != fac.get("total", 0): + issues.append(("WARNING", "fac_total", + f"len={len(fac.get('list',[]))} ≠ total={fac.get('total')}")) + + # ── 3. Mandatory fields ────────────────────────────────────────────────── + if not n.get("name") or n.get("name") == "Unknown": + issues.append(("CRITICAL", "name_empty", f"name={n.get('name')!r}")) + + if not n.get("asn"): + issues.append(("CRITICAL", "asn_field", "ASN field missing in response")) + + if not n.get("rir"): + issues.append(("WARNING", "rir_empty", f"rir empty, country={n.get('country')!r}")) + + if not n.get("country"): + issues.append(("WARNING", "country_empty", "country field empty")) + + # ── 4. External cross-validation: RIPE Stat prefix count ──────────────── + ripe = fetch(f"https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS{asn}") + if ripe and ripe.get("data", {}).get("prefixes") is not None: + ripe_pfx = len(ripe["data"]["prefixes"]) + pc_pfx = p.get("total", 0) + result["data"]["ripe_stat_pfx"] = ripe_pfx + if ripe_pfx > 0 and pc_pfx > 0: + ratio = min(ripe_pfx, pc_pfx) / max(ripe_pfx, pc_pfx) + if ratio < 0.85: + issues.append(("WARNING", "prefix_ext_mismatch", + f"PC={pc_pfx} vs RIPE Stat={ripe_pfx} ({round((1-ratio)*100)}% diff)")) + elif ripe_pfx == 0 and pc_pfx > 0: + issues.append(("WARNING", "prefix_ext_zero", + f"RIPE Stat reports 0 prefixes, PC shows {pc_pfx}")) + + # ── 5. External cross-validation: PeeringDB IX count ──────────────────── + pdb = fetch(f"https://www.peeringdb.com/api/netixlan?asn={asn}&depth=0") + if pdb and isinstance(pdb.get("data"), list): + pdb_ix = len(pdb["data"]) + pc_ix = ix.get("total_connections", 0) + result["data"]["pdb_ix_cnt"] = pdb_ix + if pdb_ix > 0 and pc_ix > 0: + ratio = min(pdb_ix, pc_ix) / max(pdb_ix, pc_ix) + if ratio < 0.85: + issues.append(("WARNING", "ix_ext_mismatch", + f"PC={pc_ix} vs PeeringDB={pdb_ix} ({round((1-ratio)*100)}% diff)")) + + # ── Categorize ─────────────────────────────────────────────────────────── + result["issues"] = issues + crits = [x for x in issues if x[0] == "CRITICAL"] + warns = [x for x in issues if x[0] == "WARNING"] + if crits: + result["status"] = "critical" + elif warns: + result["status"] = "warning" + else: + result["status"] = "ok" + + return result + +# ── Main ────────────────────────────────────────────────────────────────────── +if __name__ == "__main__": + date_str = datetime.now(timezone.utc).strftime("%Y-%m-%d") + asns = select_daily_asns(date_str, 100) + start = time.time() + + print(f"PeerCortex Rotating Audit — {date_str}") + print(f"Pool: {len(ASN_POOL_DEDUP)} ASNs | Today: {len(asns)} selected") + print("=" * 70) + + results = [] + counts = {"ok": 0, "warning": 0, "critical": 0, "skip": 0} + + for i, asn in enumerate(asns): + sys.stdout.write(f"\r [{i+1:3d}/100] AS{asn}... ") + sys.stdout.flush() + r = audit_asn(asn) + results.append(r) + counts[r["status"]] += 1 + time.sleep(0.3) # be gentle to external APIs + + elapsed = time.time() - start + print(f"\r Done in {elapsed:.0f}s" + " " * 30) + + # ── Summary ─────────────────────────────────────────────────────────────── + print() + print("=" * 70) + print(f"SUMMARY — {date_str}") + print("=" * 70) + print(f" ✓ PERFECT: {counts['ok']:3d}") + print(f" ⚠ WARNING: {counts['warning']:3d}") + print(f" ✗ CRITICAL: {counts['critical']:3d}") + print(f" ⏭ SKIP: {counts['skip']:3d}") + + issues_found = [r for r in results if r["status"] in ("critical", "warning")] + if issues_found: + print(f"\n ISSUES ({len(issues_found)} ASNs):") + for r in issues_found: + for sev, field, msg in r["issues"]: + print(f" [{sev[:4]}] AS{r['asn']:>7} | {field:30s} | {msg[:55]}") + + # ── Save JSON report ────────────────────────────────────────────────────── + report = { + "date": date_str, + "elapsed_s": round(elapsed), + "asns_tested": asns, + "pool_size": len(ASN_POOL_DEDUP), + "counts": counts, + "results": results, + "generated": datetime.now(timezone.utc).isoformat(), + } + out_path = f"/var/log/peercortex/audit-{date_str}.json" + os.makedirs("/var/log/peercortex", exist_ok=True) + with open(out_path, "w") as f: + json.dump(report, f, indent=2) + print(f"\nReport: {out_path}") + print(f"Audit complete: {datetime.now(timezone.utc).isoformat()}") diff --git a/audit/run_daily_audit.sh b/audit/run_daily_audit.sh new file mode 100755 index 0000000..edff38e --- /dev/null +++ b/audit/run_daily_audit.sh @@ -0,0 +1,6 @@ +#!/bin/bash +DATE=$(date +%Y-%m-%d) +LOG=/var/log/peercortex/audit-${DATE}.log +find /var/log/peercortex/ -name 'audit-*.log' -mtime +30 -delete 2>/dev/null +find /var/log/peercortex/ -name 'audit-*.json' -mtime +30 -delete 2>/dev/null +python3 /opt/peercortex-app/audit/rotating_audit.py > "$LOG" 2>&1 diff --git a/audit/send_audit_report.py b/audit/send_audit_report.py new file mode 100755 index 0000000..b399970 --- /dev/null +++ b/audit/send_audit_report.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python3 +"""PeerCortex Daily Audit Mailer — detailed report via localhost:25""" +import os, json, smtplib +from datetime import datetime, timezone, timedelta +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from email.utils import make_msgid, formatdate + +SMTP_HOST = "localhost" +SMTP_PORT = 25 +MAIL_FROM = "ctx-report@fichtmueller.org" +MAIL_TO = "rf@flexoptix.net" + +def td(content, color=None, align="left", mono=False, bold=False): + ff = "monospace" if mono else "sans-serif" + fw = "font-weight:700;" if bold else "" + cl = "color:%s;" % color if color else "" + return '%s' % (ff, align, cl, fw, content) + +def load_report(): + for delta in [0, 1]: + d = (datetime.now(timezone.utc) - timedelta(days=delta)).strftime("%Y-%m-%d") + try: + with open("/var/log/peercortex/audit-%s.json" % d) as f: + return json.load(f), d + except FileNotFoundError: + continue + return None, datetime.now(timezone.utc).strftime("%Y-%m-%d") + +def build(report, date_str): + if not report: + return ("

No report for %s

" % date_str, + "PeerCortex Audit %s — no report" % date_str) + + counts = report.get("counts", {}) + results = report.get("results", []) + elapsed = report.get("elapsed_s", 0) + pool = report.get("pool_size", 0) + ok = counts.get("ok", 0) + warn = counts.get("warning", 0) + crit = counts.get("critical", 0) + skip = counts.get("skip", 0) + total = len(results) + mins, secs = elapsed // 60, elapsed % 60 + + if crit == 0 and warn == 0: + sc, emoji, text, spfx = "#22c55e", "✅", "All Clear — no issues detected", "✅ All Clear" + elif crit == 0: + sc, emoji, text, spfx = "#f97316", "⚠️", "%d warning(s)" % warn, "⚠️ %d Warning(s)" % warn + else: + sc, emoji, text, spfx = "#ef4444", "🚨", "%d CRITICAL issue(s) — action required" % crit, "🚨 %d CRITICAL" % crit + + subject = "PeerCortex Daily Audit %s — %s" % (date_str, spfx) + + # Issues + issue_results = [r for r in results if r.get("status") in ("critical", "warning")] + issues_html = "" + if issue_results: + rows = "" + for r in issue_results: + asn = str(r["asn"]) + name = (r.get("data", {}).get("name") or "?")[:28] + for sev, field, msg in r.get("issues", []): + c = "#ef4444" if sev == "CRITICAL" else "#f97316" + rows += "%s%s%s%s%s" % ( + td("[%s]" % sev[:4], c, mono=True), + td("AS" + asn, "#94a3b8", mono=True), + td(name, "#e2e8f0"), + td(field, "#64748b", mono=True), + td(msg[:60], "#94a3b8")) + issues_html = ( + "

⚠ Issues (%d ASNs)

" % len(issue_results) + + "%s
" % rows + ) + + # Skipped + skip_results = [r for r in results if r.get("status") == "skip"] + skipped_html = "" + if skip_results: + rows = "" + for r in skip_results: + asn = str(r["asn"]) + reason = r.get("issues", [["SKIP","","no response from PeerCortex"]])[0][2] if r.get("issues") else "no response from PeerCortex" + url = "https://peercortex.org/?asn=" + asn + rows += ("%s%s" + "→ lookup") % ( + td("AS" + asn, "#94a3b8", mono=True), + td(reason, "#64748b"), + url) + skipped_html = ( + "

⏭ Skipped ASNs (%d) — no PeerCortex response

" % skip + + "

Possible causes: ASN not in any routing table, very large prefix count, or temporary API timeout.

" + + "%s
" % rows + ) + + # Low RPKI + rpki_bad = sorted( + [r for r in results if r.get("status") != "skip" and r.get("data", {}).get("rpki_pct", 100) < 60], + key=lambda r: r.get("data", {}).get("rpki_pct", 100) + )[:8] + rpki_html = "" + if rpki_bad: + rows = "" + for r in rpki_bad: + d = r.get("data", {}) + pct = d.get("rpki_pct", 0) + bar = ("
" + "
") % max(2, pct) + rows += "%s%s%s%s%s" % ( + td("AS" + str(r["asn"]), "#94a3b8", mono=True), + td((d.get("name") or "?")[:28], "#e2e8f0"), + td(d.get("rir", "?"), "#64748b", "center"), + bar, + td(str(pct) + "%", "#ef4444", "right", bold=True)) + rpki_html = ( + "

📉 Low RPKI Coverage (<60%%)

" + + "%s
" % rows + ) + + # All ASNs table + sorted_results = sorted([r for r in results if r.get("status") != "skip"], key=lambda x: x["asn"]) + header = ("%s%s%s%s%s%s%s%s%s%s%s" % ( + td("ASN", "#64748b", "right", mono=True), + td("Name", "#64748b"), + td("RIR", "#64748b", "center"), + td("CC", "#64748b", "center"), + td("Pfx", "#64748b", "right"), + td("RIPE Stat", "#64748b", "right"), + td("RPKI%", "#64748b", "right"), + td("IX", "#64748b", "right"), + td("PDB IX", "#64748b", "right"), + td("Fac", "#64748b", "right"), + td("Status", "#64748b", "center"))) + rows = "" + for i, r in enumerate(sorted_results): + d = r.get("data", {}) + bg = "#0f172a" if i % 2 == 0 else "#111827" + st = r.get("status", "ok") + if st == "critical": + st_html = '✗ CRIT' + elif st == "warning": + st_html = '⚠ WARN' + else: + st_html = '' + pct = d.get("rpki_pct", 100) + rpki_c = "#ef4444" if pct < 50 else "#f97316" if pct < 80 else "#94a3b8" + ripe = str(d.get("ripe_stat_pfx", "—")) + pdb = str(d.get("pdb_ix_cnt", "—")) + rows += "%s%s%s%s%s%s%s%s%s%s%s" % ( + bg, + td("AS" + str(r["asn"]), "#64748b", "right", mono=True), + td((d.get("name") or "?")[:28], "#e2e8f0"), + td(d.get("rir", "?"), "#94a3b8", "center"), + td(d.get("cc", "?"), "#94a3b8", "center"), + td(str(d.get("pfx_total", 0)), "#94a3b8", "right", mono=True), + td(ripe, "#64748b", "right", mono=True), + td(str(pct) + "%", rpki_c, "right", mono=True), + td(str(d.get("ix_cnt", 0)), "#94a3b8", "right", mono=True), + td(pdb, "#64748b", "right", mono=True), + td(str(d.get("fac_cnt", 0)), "#94a3b8", "right", mono=True), + st_html) + + all_table = ( + "

All Tested ASNs (%d)

" % len(sorted_results) + + "
%s%s
" % (header, rows) + ) + + html = """ + + +
+
+ PEERCORTEX + Daily Audit Report · %(date)s +
+
+
%(emoji)s %(text)s
+
%(total)d ASNs tested from pool of %(pool)d · Runtime: %(mins)dm %(secs)ds · Cross-validated: RIPE Stat + PeeringDB
+
+ + + + + + + + +
+
%(ok)d
PERFECT
+
%(warn)d
WARNINGS
+
%(crit)d
CRITICAL
+
%(skip)d
SKIPPED
+ %(issues)s %(skipped)s %(rpki)s %(alltable)s +
+ PeerCortex · peercortex.org + · 100 ASNs rotate daily from %(pool)d ASN pool · Audit at 02:00 UTC, report at 06:00 UTC +
+
""" % dict( + date=date_str, sc=sc, emoji=emoji, text=text, + total=total, pool=pool, mins=mins, secs=secs, + ok=ok, warn=warn, crit=crit, skip=skip, + issues=issues_html, skipped=skipped_html, + rpki=rpki_html, alltable=all_table) + + return html, subject + + +def send_email(subject, html_body): + msg = MIMEMultipart("alternative") + msg["Subject"] = subject + msg["From"] = MAIL_FROM + msg["To"] = MAIL_TO + msg["Date"] = formatdate(localtime=True) + msg["Message-ID"] = make_msgid(domain="fichtmueller.org") + msg.attach(MIMEText("PeerCortex Daily Audit — please view in an HTML-capable email client.\n\nhttps://peercortex.org", "plain", "utf-8")) + msg.attach(MIMEText(html_body, "html", "utf-8")) + with smtplib.SMTP(SMTP_HOST, SMTP_PORT, timeout=15) as s: + s.sendmail(MAIL_FROM, [MAIL_TO], msg.as_bytes()) + print("Sent '%s' -> %s" % (subject, MAIL_TO)) + + +if __name__ == "__main__": + report, date_str = load_report() + html, subject = build(report, date_str) + print("Email size: %d bytes" % len(html.encode())) + send_email(subject, html) diff --git a/audit/send_audit_report.sh b/audit/send_audit_report.sh new file mode 100755 index 0000000..10f6b8c --- /dev/null +++ b/audit/send_audit_report.sh @@ -0,0 +1,3 @@ +#!/bin/bash +export $(grep -E '^SMTP' /opt/peercortex-app/.env | xargs) +python3 /opt/peercortex-app/audit/send_audit_report.py diff --git a/deploy-from-scp.sh b/deploy-from-scp.sh new file mode 100755 index 0000000..37a0296 --- /dev/null +++ b/deploy-from-scp.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Deploy PeerCortex from pre-copied files (server.js already in place via SCP) +BACKUP_DIR=/opt/peercortex-app/backups +mkdir -p $BACKUP_DIR +TS=$(date +%Y%m%d_%H%M%S) +cp /opt/peercortex-app/server.js $BACKUP_DIR/server.js.$TS +ls -t $BACKUP_DIR/server.js.* 2>/dev/null | tail -n +21 | xargs rm -f 2>/dev/null +echo "[backup] Saved server.js ($TS)" +pm2 restart peercortex diff --git a/hijack-alerts.json b/hijack-alerts.json new file mode 100644 index 0000000..8f551c4 --- /dev/null +++ b/hijack-alerts.json @@ -0,0 +1,24550 @@ +[ + { + "id": "1cd5436afebd1e80", + "asn": "199121", + "ts": "2026-06-15T11:00:12.656Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "36a6622c24ed26d1", + "asn": "138699", + "ts": "2026-06-15T12:30:06.281Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "8bf8329d8e3cb77e", + "asn": "141805", + "ts": "2026-06-15T12:30:19.407Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "696d5fbb9d34e721", + "asn": "3491", + "ts": "2026-06-15T15:00:06.359Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "45.195.111.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "207.176.31.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 4 missing" + }, + { + "id": "62ff6f8f905a167f", + "asn": "15290", + "ts": "2026-06-15T15:00:07.886Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "b9a408dd83c3f6b8", + "asn": "34702", + "ts": "2026-06-15T15:00:15.888Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "38.180.230.0/24", + "38.244.154.0/24", + "46.22.208.0/20", + "80.79.112.0/20", + "38.244.216.0/24", + "185.114.116.0/24", + "38.180.44.0/23", + "114.129.9.0/24", + "77.83.28.0/22", + "38.244.155.0/24", + "185.46.20.0/22", + "185.246.184.0/22", + "38.180.248.0/24", + "38.180.163.0/24", + "37.252.4.0/23", + "2a01:97a0::/32", + "38.180.164.0/24", + "38.180.10.0/24", + "38.180.216.0/24", + "176.97.74.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS34702: 0 unexpected prefix(es), 20 missing" + }, + { + "id": "849133ec654eb827", + "asn": "132372", + "ts": "2026-06-15T15:00:18.308Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "3298f8fa150e2b6f", + "asn": "24940", + "ts": "2026-06-15T16:00:04.851Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "7e133bf4bea21ffe", + "asn": "396986", + "ts": "2026-06-15T17:00:05.869Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "101.45.236.0/22" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 10 unexpected prefix(es), 1 missing" + }, + { + "id": "f71900e135c3cc15", + "asn": "57099", + "ts": "2026-06-15T17:00:06.619Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b5d22a1605943f06", + "asn": "22616", + "ts": "2026-06-15T17:00:07.942Z", + "severity": "HIGH", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "8881c693d3a0d59a", + "asn": "133815", + "ts": "2026-06-15T17:30:14.856Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "103.152.90.0/23", + "103.190.218.0/24", + "103.52.46.0/23", + "103.149.224.0/23", + "103.130.136.0/23", + "103.190.216.0/23", + "103.150.14.0/23", + "103.149.224.0/24", + "103.130.136.0/24", + "103.188.52.0/24", + "103.190.218.0/23", + "103.130.138.0/23", + "103.141.150.0/23", + "103.149.233.0/24", + "103.150.16.0/23", + "103.190.219.0/24", + "103.149.230.0/23", + "103.52.46.0/24", + "103.152.96.0/24", + "103.152.110.0/23", + "103.150.34.0/23", + "103.188.53.0/24", + "103.188.50.0/23", + "103.150.4.0/23", + "103.52.45.0/24", + "103.188.52.0/23", + "103.149.234.0/23", + "103.141.150.0/24", + "103.52.47.0/24", + "103.130.136.0/22", + "103.141.152.0/24", + "103.152.96.0/23", + "103.150.12.0/23", + "103.188.50.0/24", + "103.190.220.0/23", + "103.130.137.0/24", + "103.141.151.0/24", + "103.52.44.0/22", + "103.52.44.0/23", + "103.188.41.0/24", + "103.188.40.0/23", + "103.149.232.0/24", + "103.151.194.0/23", + "103.149.225.0/24", + "103.141.153.0/24", + "103.188.40.0/24", + "103.151.18.0/23", + "2403:bac0::/32", + "103.52.44.0/24", + "103.151.100.0/23", + "2403:57c0::/32", + "103.141.152.0/23", + "103.149.235.0/24", + "103.149.234.0/24", + "103.152.70.0/23", + "103.188.51.0/24", + "103.149.232.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS133815: 0 unexpected prefix(es), 57 missing" + }, + { + "id": "fdce2c893da29056", + "asn": "138699", + "ts": "2026-06-15T18:30:13.293Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c4feb1b96cb6f8b5", + "asn": "141805", + "ts": "2026-06-15T19:00:15.931Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "91f5b79d5d133efd", + "asn": "3491", + "ts": "2026-06-15T21:30:06.401Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1e80c4398f8117eb", + "asn": "15290", + "ts": "2026-06-15T21:30:06.806Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "74b6571e2f059465", + "asn": "34702", + "ts": "2026-06-15T21:30:06.944Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "7449192d68c9a7e1", + "asn": "132372", + "ts": "2026-06-15T21:30:07.247Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "174210e8d5316ec1", + "asn": "24940", + "ts": "2026-06-15T22:00:05.807Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "957ea776f2308c94", + "asn": "396986", + "ts": "2026-06-15T23:00:06.155Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "101.45.236.0/22" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 10 unexpected prefix(es), 1 missing" + }, + { + "id": "8618386e589465bf", + "asn": "57099", + "ts": "2026-06-15T23:00:07.558Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "8d2f409ec938982a", + "asn": "22616", + "ts": "2026-06-15T23:00:09.152Z", + "severity": "HIGH", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "ed9f21b684f999c8", + "asn": "138699", + "ts": "2026-06-16T01:00:05.552Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a4d2fe348e3337a8", + "asn": "199121", + "ts": "2026-06-16T01:30:12.664Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "667336e4e7f8a075", + "asn": "141805", + "ts": "2026-06-16T01:30:29.042Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "03d0c309a2e9f14a", + "asn": "32", + "ts": "2026-06-16T03:30:12.819Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "204.63.224.0/21", + "171.64.0.0/14", + "2607:f6d0::/32", + "128.12.0.0/16", + "2620:6c:40c0::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS32: 0 unexpected prefix(es), 5 missing" + }, + { + "id": "a49abae0bbdebba5", + "asn": "3491", + "ts": "2026-06-16T03:30:13.612Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "00c5a128ae46726d", + "asn": "15290", + "ts": "2026-06-16T03:30:13.950Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "bc9ab4a2ab27f61b", + "asn": "34702", + "ts": "2026-06-16T03:30:14.090Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "5a1f271d1da325db", + "asn": "132372", + "ts": "2026-06-16T03:30:14.459Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "5136c3d95d4efd76", + "asn": "24940", + "ts": "2026-06-16T04:30:06.909Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "09d90374b733badd", + "asn": "22616", + "ts": "2026-06-16T05:00:11.330Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 5 unexpected prefix(es), 0 missing" + }, + { + "id": "cb9edb1ef9b1d134", + "asn": "396986", + "ts": "2026-06-16T05:30:05.107Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "101.45.236.0/22" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 10 unexpected prefix(es), 1 missing" + }, + { + "id": "e8a33a280ddb4bb3", + "asn": "57099", + "ts": "2026-06-16T05:30:05.996Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "114726d3131025da", + "asn": "138699", + "ts": "2026-06-16T07:28:54.470Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "599f04447b1cfd4f", + "asn": "141805", + "ts": "2026-06-16T07:58:55.067Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "e94ba0ff3be386fb", + "asn": "3491", + "ts": "2026-06-16T09:58:53.931Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3a52527eff8145af", + "asn": "15290", + "ts": "2026-06-16T09:58:54.086Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "e2cd1f99d91a1146", + "asn": "34702", + "ts": "2026-06-16T09:58:54.235Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "cc2bc53b8de02f92", + "asn": "132372", + "ts": "2026-06-16T09:58:54.552Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c956cccfbb78f0f2", + "asn": "24940", + "ts": "2026-06-16T10:58:52.901Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "0b387bd1d50fff7e", + "asn": "22616", + "ts": "2026-06-16T11:28:55.855Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.12.0/23", + "205.220.14.0/23", + "165.225.99.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 5 unexpected prefix(es), 0 missing" + }, + { + "id": "c154f72564a76cbf", + "asn": "396986", + "ts": "2026-06-16T11:58:53.549Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 10 unexpected prefix(es), 1 missing" + }, + { + "id": "7ac73896625500b0", + "asn": "57099", + "ts": "2026-06-16T11:58:54.429Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "4b3a29cdf1862bea", + "asn": "138699", + "ts": "2026-06-16T13:58:53.318Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "df5b0c855afb3de5", + "asn": "141805", + "ts": "2026-06-16T14:28:55.070Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "acecc2e3a490d975", + "asn": "3491", + "ts": "2026-06-16T15:58:54.284Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "060415d17eaf0888", + "asn": "15290", + "ts": "2026-06-16T15:58:54.623Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "7fb68166f2aebbce", + "asn": "34702", + "ts": "2026-06-16T15:58:54.765Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "26c08b42fd58be74", + "asn": "132372", + "ts": "2026-06-16T15:58:55.066Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "acedf5805e4a96f1", + "asn": "24940", + "ts": "2026-06-16T16:58:52.923Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "01e6687bd5ee7c64", + "asn": "22616", + "ts": "2026-06-16T17:28:58.525Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "165.225.99.0/24", + "205.220.12.0/23", + "205.220.14.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 5 unexpected prefix(es), 0 missing" + }, + { + "id": "aaa47f85bd13d686", + "asn": "396986", + "ts": "2026-06-16T17:58:53.575Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 10 unexpected prefix(es), 1 missing" + }, + { + "id": "2318b223b258f97e", + "asn": "57099", + "ts": "2026-06-16T18:28:54.460Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "51d05ed3fb34b408", + "asn": "138699", + "ts": "2026-06-16T19:58:53.673Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1606b1b7a18881ef", + "asn": "141805", + "ts": "2026-06-16T20:28:55.396Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "0e7a97a1b9243be2", + "asn": "3491", + "ts": "2026-06-16T21:58:54.355Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "26ee2a0f01b41e33", + "asn": "15290", + "ts": "2026-06-16T21:59:00.045Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "e92d062ccd0c7056", + "asn": "34702", + "ts": "2026-06-16T21:59:00.175Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "0028dec46c5006f5", + "asn": "132372", + "ts": "2026-06-16T21:59:00.451Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "351fd59c358ff4e6", + "asn": "24940", + "ts": "2026-06-16T23:28:52.898Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "e889aee73acd8811", + "asn": "22616", + "ts": "2026-06-16T23:28:59.294Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 5 unexpected prefix(es), 0 missing" + }, + { + "id": "63d220e4e62992a0", + "asn": "396986", + "ts": "2026-06-16T23:58:53.667Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "4cc8293b2b2b1cc4", + "asn": "57099", + "ts": "2026-06-17T00:28:54.993Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "699603d5fe66956b", + "asn": "138699", + "ts": "2026-06-17T01:58:53.724Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c1d49372d3e9e667", + "asn": "141805", + "ts": "2026-06-17T02:58:55.685Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "ce3e4835248980b1", + "asn": "3491", + "ts": "2026-06-17T04:28:54.151Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bf5fd1695b8e685e", + "asn": "15290", + "ts": "2026-06-17T04:28:54.491Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "25f95e46446d1563", + "asn": "34702", + "ts": "2026-06-17T04:28:54.608Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "6b49c771c3c4150b", + "asn": "132372", + "ts": "2026-06-17T04:28:54.883Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d78f76343bf81456", + "asn": "24940", + "ts": "2026-06-17T05:58:52.923Z", + "severity": "MEDIUM", + "unexpected": [ + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 1 unexpected prefix(es), 1 missing" + }, + { + "id": "4c9002cae268519a", + "asn": "22616", + "ts": "2026-06-17T05:58:55.784Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 6 unexpected prefix(es), 0 missing" + }, + { + "id": "11cbf15916c6f53d", + "asn": "396986", + "ts": "2026-06-17T06:28:53.619Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "6ac777e1b8094abd", + "asn": "57099", + "ts": "2026-06-17T06:58:53.954Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "35fdac167cc3f33e", + "asn": "138699", + "ts": "2026-06-17T08:28:56.071Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "af17cace9197cdbe", + "asn": "141805", + "ts": "2026-06-17T08:58:55.784Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "12d54c0e29ecb3b1", + "asn": "3491", + "ts": "2026-06-17T10:28:54.183Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "f04587f690584dc9", + "asn": "15290", + "ts": "2026-06-17T10:28:54.522Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "e89d4e8085dc0342", + "asn": "34702", + "ts": "2026-06-17T10:28:54.652Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "ae2c5e7c0b14920f", + "asn": "132372", + "ts": "2026-06-17T10:28:54.971Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "dcb81c26d5b3a1ee", + "asn": "24940", + "ts": "2026-06-17T11:58:52.923Z", + "severity": "MEDIUM", + "unexpected": [ + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 1 unexpected prefix(es), 1 missing" + }, + { + "id": "c6a6a7f0e3c40441", + "asn": "396986", + "ts": "2026-06-17T12:28:54.649Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "6d591cfd75ddae19", + "asn": "22616", + "ts": "2026-06-17T12:28:59.729Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 7 unexpected prefix(es), 0 missing" + }, + { + "id": "92ccabe6b72b8b88", + "asn": "57099", + "ts": "2026-06-17T12:58:54.351Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "87c9d4c2f594e3e1", + "asn": "138699", + "ts": "2026-06-17T14:58:53.652Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "e8f18b0eb8398f3e", + "asn": "141805", + "ts": "2026-06-17T15:28:55.079Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "ece9312cd5521dcc", + "asn": "3491", + "ts": "2026-06-17T16:28:54.310Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "6ed68cfd6005e338", + "asn": "15290", + "ts": "2026-06-17T16:28:54.743Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "db14ac66a6b6fe2d", + "asn": "34702", + "ts": "2026-06-17T16:28:54.871Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "a14a513f1b7e0ac8", + "asn": "132372", + "ts": "2026-06-17T16:28:55.180Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "56f7ed4243153641", + "asn": "24940", + "ts": "2026-06-17T17:58:53.395Z", + "severity": "MEDIUM", + "unexpected": [ + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 1 unexpected prefix(es), 1 missing" + }, + { + "id": "bab49445d501f245", + "asn": "396986", + "ts": "2026-06-17T18:58:55.891Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "ebb3473096606156", + "asn": "57099", + "ts": "2026-06-17T18:58:56.743Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "992d95f50b482717", + "asn": "22616", + "ts": "2026-06-17T18:58:58.092Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 7 unexpected prefix(es), 0 missing" + }, + { + "id": "e54f668400a69919", + "asn": "138699", + "ts": "2026-06-17T20:58:53.727Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "80977d1ba63f1b42", + "asn": "141805", + "ts": "2026-06-17T21:28:55.486Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "d701dfc1b6e2b5fa", + "asn": "3491", + "ts": "2026-06-17T22:58:54.324Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "8edc484160943c41", + "asn": "15290", + "ts": "2026-06-17T22:58:54.599Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "192054906cc5a8f3", + "asn": "34702", + "ts": "2026-06-17T22:58:54.734Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "1646506cbe819534", + "asn": "132372", + "ts": "2026-06-17T22:58:55.066Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "ec91bdc41cab3465", + "asn": "24940", + "ts": "2026-06-18T00:28:53.018Z", + "severity": "MEDIUM", + "unexpected": [ + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 1 unexpected prefix(es), 1 missing" + }, + { + "id": "4f6ef97ce725ac39", + "asn": "396986", + "ts": "2026-06-18T01:28:53.582Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "678eaa484ba7acb6", + "asn": "57099", + "ts": "2026-06-18T01:28:54.278Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "9dbd2083aa4cb1bb", + "asn": "22616", + "ts": "2026-06-18T01:28:55.785Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 7 unexpected prefix(es), 0 missing" + }, + { + "id": "16ac28632ff690c7", + "asn": "138699", + "ts": "2026-06-18T03:28:53.604Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "990fd67da908e310", + "asn": "141805", + "ts": "2026-06-18T03:58:56.134Z", + "severity": "HIGH", + "unexpected": [ + "103.165.170.0/23", + "103.109.136.0/22" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "d94d320e623319fe", + "asn": "3491", + "ts": "2026-06-18T05:28:54.100Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "c2f047914c59e0ac", + "asn": "15290", + "ts": "2026-06-18T05:28:54.440Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "cdbd324b5c72d29d", + "asn": "34702", + "ts": "2026-06-18T05:28:54.567Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f8874ecfda759821", + "asn": "132372", + "ts": "2026-06-18T05:28:54.864Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "e1f09a60338c0be1", + "asn": "24940", + "ts": "2026-06-18T06:53:28.486Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "32d9bcacf4d8f1fe", + "asn": "396986", + "ts": "2026-06-18T07:53:28.845Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "1a9c39df987b0e66", + "asn": "57099", + "ts": "2026-06-18T07:53:29.532Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3e8d68b968987531", + "asn": "22616", + "ts": "2026-06-18T07:53:30.893Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "140.232.190.0/24", + "155.95.86.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 9 unexpected prefix(es), 0 missing" + }, + { + "id": "3a9361c22335b600", + "asn": "138699", + "ts": "2026-06-18T09:53:29.047Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "b922e180ccce7388", + "asn": "199121", + "ts": "2026-06-18T10:23:36.361Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "603efaed8a07f910", + "asn": "141805", + "ts": "2026-06-18T10:23:56.474Z", + "severity": "HIGH", + "unexpected": [ + "103.165.170.0/23", + "103.109.136.0/22" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "c4a0d429a5b52266", + "asn": "3491", + "ts": "2026-06-18T11:53:30.580Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "55b993a58a83ef19", + "asn": "15290", + "ts": "2026-06-18T11:53:30.954Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "fefb6dfc133e265d", + "asn": "34702", + "ts": "2026-06-18T11:53:31.084Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "418ebb23b6ae7bbc", + "asn": "132372", + "ts": "2026-06-18T11:53:31.387Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "46e674586d822b82", + "asn": "24940", + "ts": "2026-06-18T12:53:28.520Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "cf525506e5133810", + "asn": "396986", + "ts": "2026-06-18T13:53:29.171Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "943fcc7aabc18650", + "asn": "57099", + "ts": "2026-06-18T13:53:29.895Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2a6b0ed00b9b8340", + "asn": "22616", + "ts": "2026-06-18T13:53:32.606Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 10 unexpected prefix(es), 0 missing" + }, + { + "id": "b7da4e5878b7e7d2", + "asn": "138699", + "ts": "2026-06-18T16:23:28.990Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "b4d18d68de63cdee", + "asn": "3491", + "ts": "2026-06-18T18:23:29.441Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "c89f0cf728059f52", + "asn": "15290", + "ts": "2026-06-18T18:23:29.803Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "c49ffa80d190924c", + "asn": "34702", + "ts": "2026-06-18T18:23:29.934Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "bd76637f3df98ea3", + "asn": "132372", + "ts": "2026-06-18T18:23:30.237Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f1f6d6339118bfbe", + "asn": "24940", + "ts": "2026-06-18T19:23:28.493Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c00cd08ecd89e3a0", + "asn": "396986", + "ts": "2026-06-18T20:23:29.171Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "b8ecffa63baa5b53", + "asn": "57099", + "ts": "2026-06-18T20:23:29.831Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3146314cb1869367", + "asn": "22616", + "ts": "2026-06-18T20:23:31.129Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 11 unexpected prefix(es), 0 missing" + }, + { + "id": "dd84693faea837d8", + "asn": "138699", + "ts": "2026-06-18T22:23:29.149Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1533e6c881d061a3", + "asn": "3491", + "ts": "2026-06-19T00:23:29.527Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1beaf8ce86acc444", + "asn": "15290", + "ts": "2026-06-19T00:23:29.855Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "3042f915fffc7ed0", + "asn": "34702", + "ts": "2026-06-19T00:23:29.980Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2c8fd0ab835ab123", + "asn": "132372", + "ts": "2026-06-19T00:23:30.275Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "b9c7063e863d1360", + "asn": "24940", + "ts": "2026-06-19T01:23:28.511Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f803088fcb5d0112", + "asn": "396986", + "ts": "2026-06-19T02:53:28.839Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "627c4784bf8a8c29", + "asn": "57099", + "ts": "2026-06-19T02:53:30.163Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3a67408b92871a8c", + "asn": "22616", + "ts": "2026-06-19T02:53:33.911Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 11 unexpected prefix(es), 0 missing" + }, + { + "id": "854cf37c5ec7ccb2", + "asn": "138699", + "ts": "2026-06-19T04:23:29.486Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ef343c590ce07fbe", + "asn": "3491", + "ts": "2026-06-19T06:23:29.830Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "a4bc8205b048aaa4", + "asn": "15290", + "ts": "2026-06-19T06:23:30.386Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "436425134732bbd3", + "asn": "34702", + "ts": "2026-06-19T06:23:30.513Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b47d78a77a3d6520", + "asn": "132372", + "ts": "2026-06-19T06:23:30.809Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "291ad93a9e1e4181", + "asn": "24940", + "ts": "2026-06-19T07:23:28.678Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "825549651a1ef561", + "asn": "396986", + "ts": "2026-06-19T08:53:29.020Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "2ce5df3f4177aaab", + "asn": "57099", + "ts": "2026-06-19T09:23:29.690Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "17951c1b53c0ca13", + "asn": "22616", + "ts": "2026-06-19T09:23:30.996Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 12 unexpected prefix(es), 0 missing" + }, + { + "id": "763fed0f8c364f98", + "asn": "138699", + "ts": "2026-06-19T10:53:29.197Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "09684be8ab25b6a8", + "asn": "3491", + "ts": "2026-06-19T12:53:29.408Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "2b4cdd2e85459612", + "asn": "15290", + "ts": "2026-06-19T12:53:29.804Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "7544a87ce76e0f01", + "asn": "34702", + "ts": "2026-06-19T12:53:29.933Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "13c0f2c4e278a74d", + "asn": "132372", + "ts": "2026-06-19T12:53:30.243Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1717aae5f3f8e6de", + "asn": "24940", + "ts": "2026-06-19T13:53:28.503Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5111fb599b0e67aa", + "asn": "396986", + "ts": "2026-06-19T14:53:29.315Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "dd787030db31066d", + "asn": "57099", + "ts": "2026-06-19T15:23:30.025Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3b9d2ac7f695e1c0", + "asn": "22616", + "ts": "2026-06-19T15:23:31.577Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.120.0/23", + "137.31.128.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 14 unexpected prefix(es), 0 missing" + }, + { + "id": "8eb465922d15bb6c", + "asn": "138699", + "ts": "2026-06-19T17:23:28.875Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "fad418c18ebf9eaa", + "asn": "3491", + "ts": "2026-06-19T18:53:29.425Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "59a20aee201ef32b", + "asn": "15290", + "ts": "2026-06-19T18:53:29.834Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "9ea29f7435edc2da", + "asn": "34702", + "ts": "2026-06-19T18:53:29.950Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "78b3b3f5f1d64741", + "asn": "132372", + "ts": "2026-06-19T19:23:29.606Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "4170ce3fab48c4a5", + "asn": "24940", + "ts": "2026-06-19T19:53:28.519Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "3eb3c34c5ef3891e", + "asn": "396986", + "ts": "2026-06-19T21:23:28.809Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "1738d303f6b62667", + "asn": "57099", + "ts": "2026-06-19T21:53:29.798Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "292e18697bbb1297", + "asn": "22616", + "ts": "2026-06-19T21:53:32.578Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "2706ec16de425e4c", + "asn": "138699", + "ts": "2026-06-19T23:23:29.267Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "24701f442ed460bc", + "asn": "3491", + "ts": "2026-06-20T00:53:29.848Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "04f595155173343f", + "asn": "15290", + "ts": "2026-06-20T00:53:30.185Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "5c8213a9e89ed44f", + "asn": "34702", + "ts": "2026-06-20T00:53:30.314Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2758222157eddbf1", + "asn": "132372", + "ts": "2026-06-20T01:23:30.559Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "b5b336f96ef511b9", + "asn": "24940", + "ts": "2026-06-20T01:53:28.532Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "360ec68eef807e26", + "asn": "396986", + "ts": "2026-06-20T03:23:29.161Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "824bf57e024e692d", + "asn": "57099", + "ts": "2026-06-20T03:53:30.073Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "8d0c6040325d1bed", + "asn": "22616", + "ts": "2026-06-20T03:53:32.668Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "86bd1cbc50b8390f", + "asn": "138699", + "ts": "2026-06-20T05:23:29.344Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "301d3705e1b82766", + "asn": "3491", + "ts": "2026-06-20T07:23:30.045Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "5b5e1c06be83b4c3", + "asn": "15290", + "ts": "2026-06-20T07:23:30.440Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "7cfcbf1630d93b15", + "asn": "34702", + "ts": "2026-06-20T07:23:30.554Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d880834d23d041e9", + "asn": "132372", + "ts": "2026-06-20T07:23:30.892Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "434312749f9515a0", + "asn": "24940", + "ts": "2026-06-20T07:53:28.533Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "695b3a709bb634bd", + "asn": "396986", + "ts": "2026-06-20T09:53:29.102Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "c1b196f08a782ac0", + "asn": "57099", + "ts": "2026-06-20T10:23:29.391Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "9ad9535a9be4ea64", + "asn": "22616", + "ts": "2026-06-20T10:23:31.027Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "ec25ffaf69c33afa", + "asn": "138699", + "ts": "2026-06-20T11:53:28.991Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c4efe6cfc5557621", + "asn": "3491", + "ts": "2026-06-20T13:23:37.366Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1c86e8df38549562", + "asn": "15290", + "ts": "2026-06-20T13:23:37.734Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "cd6e343f4e716d72", + "asn": "34702", + "ts": "2026-06-20T13:23:37.852Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "8be43012490c08a1", + "asn": "132372", + "ts": "2026-06-20T13:23:38.235Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d214fd9b968fd35e", + "asn": "24940", + "ts": "2026-06-20T14:23:28.458Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5a03d904de948dda", + "asn": "396986", + "ts": "2026-06-20T15:53:29.596Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "657507b8195268c7", + "asn": "57099", + "ts": "2026-06-20T16:23:37.692Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "86acdf59b1222fb8", + "asn": "22616", + "ts": "2026-06-20T16:23:39.185Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "2c654c9bb62d8741", + "asn": "138699", + "ts": "2026-06-20T17:53:29.026Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "b5dff2ac01f45406", + "asn": "199121", + "ts": "2026-06-20T18:23:32.447Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "afc392bc9ab15719", + "asn": "3491", + "ts": "2026-06-20T19:53:29.499Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "9eace022b65c3d33", + "asn": "15290", + "ts": "2026-06-20T19:53:29.848Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "d79208415890168a", + "asn": "34702", + "ts": "2026-06-20T19:53:29.968Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "ed7bf141adbb11f3", + "asn": "132372", + "ts": "2026-06-20T19:53:30.297Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d1a9086c33f5a77c", + "asn": "24940", + "ts": "2026-06-20T20:23:28.462Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "e861fe3f4c5f4815", + "asn": "396986", + "ts": "2026-06-20T22:23:29.206Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "6f9ca500fb38dcac", + "asn": "57099", + "ts": "2026-06-20T22:53:29.989Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3b0310c63a91809c", + "asn": "22616", + "ts": "2026-06-20T22:53:31.405Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "745a3fa059469035", + "asn": "138699", + "ts": "2026-06-21T00:23:29.177Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "f3de4066f286f517", + "asn": "3491", + "ts": "2026-06-21T01:53:29.840Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "694701861d4bc7f5", + "asn": "15290", + "ts": "2026-06-21T01:53:30.187Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "66ef2de75adbb951", + "asn": "34702", + "ts": "2026-06-21T01:53:30.313Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "c7aac4b8d5b1c52a", + "asn": "132372", + "ts": "2026-06-21T01:53:30.690Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "2d5a1b0eb5d8b547", + "asn": "24940", + "ts": "2026-06-21T02:23:28.522Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5b6a31deff8d6693", + "asn": "396986", + "ts": "2026-06-21T04:23:29.562Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "257219d13bf90afd", + "asn": "57099", + "ts": "2026-06-21T05:23:32.709Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2b040b2fbc780b62", + "asn": "22616", + "ts": "2026-06-21T05:23:35.575Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "2bee23139dc7ef0d", + "asn": "138699", + "ts": "2026-06-21T06:53:28.866Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "eb9fc9bf5e994e15", + "asn": "3491", + "ts": "2026-06-21T07:53:29.865Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "6d8cb10ccff93f4f", + "asn": "15290", + "ts": "2026-06-21T07:53:30.262Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "2793de36e847a236", + "asn": "34702", + "ts": "2026-06-21T07:53:30.908Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2ba5614d6bce07d9", + "asn": "132372", + "ts": "2026-06-21T07:53:32.291Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "ba1c14476cd62325", + "asn": "24940", + "ts": "2026-06-21T08:23:28.532Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d3f36224b1b0732b", + "asn": "396986", + "ts": "2026-06-21T10:53:29.025Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "0c1da7b4b7a4a0c3", + "asn": "57099", + "ts": "2026-06-21T11:53:29.855Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "ab53689b4cebaf8f", + "asn": "22616", + "ts": "2026-06-21T11:53:31.140Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "b1c66af286388b2a", + "asn": "138699", + "ts": "2026-06-21T12:53:28.941Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "37be4b601dd2a20a", + "asn": "24940", + "ts": "2026-06-21T14:23:28.539Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c9cb973d3a08c92f", + "asn": "3491", + "ts": "2026-06-21T14:23:29.407Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "61a272082d7a5907", + "asn": "15290", + "ts": "2026-06-21T14:23:29.745Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "08805083b1a1097d", + "asn": "34702", + "ts": "2026-06-21T14:23:29.877Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "43908c5a2d006bb5", + "asn": "132372", + "ts": "2026-06-21T14:23:30.176Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "5563112f95816302", + "asn": "396986", + "ts": "2026-06-21T17:23:28.940Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "2dcfe22ba04f60e7", + "asn": "57099", + "ts": "2026-06-21T18:23:30.525Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f811489e6b389678", + "asn": "22616", + "ts": "2026-06-21T18:23:32.908Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "8e71056e6938203d", + "asn": "138699", + "ts": "2026-06-21T19:23:29.028Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "dc628facb4ce476f", + "asn": "3491", + "ts": "2026-06-21T20:23:29.413Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "c89a342d7c907ce0", + "asn": "24940", + "ts": "2026-06-21T20:53:28.532Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f1ac0d63f590b7c7", + "asn": "15290", + "ts": "2026-06-21T20:53:29.957Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "c88d9a0e53ff09f6", + "asn": "34702", + "ts": "2026-06-21T20:53:30.095Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "191a9eb31de20ff6", + "asn": "132372", + "ts": "2026-06-21T20:53:30.511Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "af95c4452329f69d", + "asn": "396986", + "ts": "2026-06-21T23:53:28.935Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "f598c4a375f31a4f", + "asn": "57099", + "ts": "2026-06-22T00:53:29.084Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "76732270563a6e30", + "asn": "22616", + "ts": "2026-06-22T00:53:30.449Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "858f16be781cc793", + "asn": "138699", + "ts": "2026-06-22T01:53:28.852Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a18cfe4db784c732", + "asn": "3491", + "ts": "2026-06-22T02:23:29.489Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3a4f86e6079847d3", + "asn": "24940", + "ts": "2026-06-22T02:53:28.958Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "e2a710d62b0f92c5", + "asn": "15290", + "ts": "2026-06-22T02:53:30.873Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "7da560b3b58ab5a9", + "asn": "34702", + "ts": "2026-06-22T02:53:31.538Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d57b1796222eedce", + "asn": "132372", + "ts": "2026-06-22T02:53:33.711Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "e1ab059d3607c77b", + "asn": "396986", + "ts": "2026-06-22T06:23:28.873Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "c9018c7345e0796b", + "asn": "57099", + "ts": "2026-06-22T06:53:30.231Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "106ba69315ba5a51", + "asn": "22616", + "ts": "2026-06-22T06:53:30.966Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "8daa1c7b817f5f7c", + "asn": "138699", + "ts": "2026-06-22T07:53:28.901Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c6c1b4eba57296e3", + "asn": "3491", + "ts": "2026-06-22T08:53:29.443Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "a4be11549c49610e", + "asn": "24940", + "ts": "2026-06-22T09:23:28.471Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "38a2df97ce1ec9dd", + "asn": "15290", + "ts": "2026-06-22T09:23:38.118Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "00a30d8fd92d9990", + "asn": "34702", + "ts": "2026-06-22T09:23:38.243Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "48ab2bdbe0ece1dd", + "asn": "132372", + "ts": "2026-06-22T09:23:38.298Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "7ba6df8a8682ccd2", + "asn": "396986", + "ts": "2026-06-22T12:23:28.946Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "9b7949203c004828", + "asn": "57099", + "ts": "2026-06-22T13:23:30.492Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f7f276dc25862845", + "asn": "22616", + "ts": "2026-06-22T13:23:31.904Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "550b5d4af6fa2b86", + "asn": "138699", + "ts": "2026-06-22T14:23:28.872Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "9d55c5b9a844dbbf", + "asn": "24940", + "ts": "2026-06-22T15:23:28.689Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "fb51b290031d8835", + "asn": "3491", + "ts": "2026-06-22T15:23:31.580Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "13a6846eb00a7f58", + "asn": "15290", + "ts": "2026-06-22T15:53:34.907Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "6b41f2d27d4d43f5", + "asn": "34702", + "ts": "2026-06-22T15:53:35.031Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b813673f5c36bb9c", + "asn": "132372", + "ts": "2026-06-22T15:53:35.310Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "38363584fe8dc7e0", + "asn": "396986", + "ts": "2026-06-22T18:23:29.257Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "4a2da2b72fdcd331", + "asn": "57099", + "ts": "2026-06-22T19:53:29.587Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "6f5aaa100f53754c", + "asn": "22616", + "ts": "2026-06-22T19:53:31.137Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "09c5b03246199e3e", + "asn": "138699", + "ts": "2026-06-22T20:23:29.381Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "6bf5473b9b50af8a", + "asn": "24940", + "ts": "2026-06-22T21:53:28.555Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "738342afa9ccc87f", + "asn": "3491", + "ts": "2026-06-22T21:53:29.494Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bb8dcf5e8ed417ea", + "asn": "15290", + "ts": "2026-06-22T22:23:29.728Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "8c5a12510c6c0292", + "asn": "34702", + "ts": "2026-06-22T22:23:29.861Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d9db27e52038146b", + "asn": "132372", + "ts": "2026-06-22T22:23:30.206Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1df82cf159944687", + "asn": "396986", + "ts": "2026-06-23T00:23:30.650Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "8b8ee18170fa6f0d", + "asn": "57099", + "ts": "2026-06-23T01:53:34.174Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "c50d1d18d6f800c8", + "asn": "22616", + "ts": "2026-06-23T01:53:37.831Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "873fc861d793173e", + "asn": "138699", + "ts": "2026-06-23T02:53:28.862Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "37172c6e16044092", + "asn": "24940", + "ts": "2026-06-23T03:53:28.562Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "fd609b8cc902597b", + "asn": "3491", + "ts": "2026-06-23T04:23:29.536Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "91988f8a5167ef98", + "asn": "15290", + "ts": "2026-06-23T04:23:29.901Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "5b641d49dfc372e0", + "asn": "34702", + "ts": "2026-06-23T04:23:30.037Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "82d3dcdf4b4cf20a", + "asn": "132372", + "ts": "2026-06-23T04:23:30.347Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d3b5832b7fdf3d2c", + "asn": "396986", + "ts": "2026-06-23T07:08:08.734Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "8e9856232fe717ac", + "asn": "57099", + "ts": "2026-06-23T08:08:09.485Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "1801ec8d2e2d3158", + "asn": "22616", + "ts": "2026-06-23T08:08:11.182Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "71ae7eb4567348a2", + "asn": "138699", + "ts": "2026-06-23T09:08:08.762Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "fd43728bf5917192", + "asn": "24940", + "ts": "2026-06-23T10:08:08.329Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "49a4b08d06144807", + "asn": "3491", + "ts": "2026-06-23T10:38:09.289Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "128a88946b4c8ad2", + "asn": "15290", + "ts": "2026-06-23T10:38:09.624Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "96ff7ca218a72fee", + "asn": "34702", + "ts": "2026-06-23T10:38:09.739Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "c430a8f8946e45ed", + "asn": "132372", + "ts": "2026-06-23T10:38:10.043Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "36e4ae5fda7419d6", + "asn": "396986", + "ts": "2026-06-23T13:38:08.745Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "ba7d6a4a6c4531e8", + "asn": "57099", + "ts": "2026-06-23T14:08:09.602Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "0b14afe10fbd8b19", + "asn": "22616", + "ts": "2026-06-23T14:38:11.335Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "1ac6f4b9fa87f4ae", + "asn": "138699", + "ts": "2026-06-23T15:08:08.786Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "bac8109dce148e9a", + "asn": "24940", + "ts": "2026-06-23T16:08:08.385Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "0af4a37d91af772d", + "asn": "3491", + "ts": "2026-06-23T16:38:09.389Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "fe0fdb5e994fa29d", + "asn": "15290", + "ts": "2026-06-23T16:38:09.746Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "6bfa0387559ed06a", + "asn": "34702", + "ts": "2026-06-23T16:38:09.879Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "a1734cd6cf47c626", + "asn": "132372", + "ts": "2026-06-23T16:38:10.184Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "87b67f3ec4908cb2", + "asn": "396986", + "ts": "2026-06-23T19:38:09.176Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "79e3dcb9cf8b8e38", + "asn": "22616", + "ts": "2026-06-23T20:38:15.223Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "abffa51808f15c98", + "asn": "138699", + "ts": "2026-06-23T21:38:08.824Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "09ecdc21152a47e9", + "asn": "24940", + "ts": "2026-06-23T22:38:08.389Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5cb31f5d7f112565", + "asn": "3491", + "ts": "2026-06-23T23:08:09.347Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "8479cd98c7df2a40", + "asn": "15290", + "ts": "2026-06-23T23:08:09.687Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "ed1c8a2c595db208", + "asn": "34702", + "ts": "2026-06-23T23:08:09.817Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "90aa81af2b2e89a6", + "asn": "132372", + "ts": "2026-06-23T23:08:10.106Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "90c16da3a8b7a09e", + "asn": "396986", + "ts": "2026-06-24T01:38:10.398Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "6ad589f555aa937d", + "asn": "22616", + "ts": "2026-06-24T02:38:22.183Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "03bb071565f4414b", + "asn": "138699", + "ts": "2026-06-24T03:38:08.919Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1ca7039bf6b0eda5", + "asn": "24940", + "ts": "2026-06-24T04:38:08.396Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "518ffdafdebc5ac9", + "asn": "3491", + "ts": "2026-06-24T05:08:09.424Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "77b0c986264dfa99", + "asn": "15290", + "ts": "2026-06-24T05:08:09.785Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "4e6203ef64a78d1e", + "asn": "34702", + "ts": "2026-06-24T05:08:09.922Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "34f2a7460a84cc8c", + "asn": "132372", + "ts": "2026-06-24T05:08:10.231Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "000d0c05e661242b", + "asn": "396986", + "ts": "2026-06-24T08:08:08.838Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "e20daf5a549e5ae3", + "asn": "22616", + "ts": "2026-06-24T09:08:10.290Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "c252e368e9c1fa64", + "asn": "138699", + "ts": "2026-06-24T10:08:11.257Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "275d838d61dfb56d", + "asn": "24940", + "ts": "2026-06-24T10:38:08.557Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "17dde8011a5b3c69", + "asn": "3491", + "ts": "2026-06-24T11:38:09.366Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "0d108b9fc908bedb", + "asn": "15290", + "ts": "2026-06-24T11:38:09.713Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "ff411ea9d4faba32", + "asn": "34702", + "ts": "2026-06-24T11:38:09.843Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d79de4d7022bf48e", + "asn": "132372", + "ts": "2026-06-24T11:38:10.155Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "34db19c4ccfad03c", + "asn": "396986", + "ts": "2026-06-24T14:08:09.391Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "4bc11a62bde3e59b", + "asn": "22616", + "ts": "2026-06-24T15:08:10.698Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "a8c41ac1d4683d43", + "asn": "138699", + "ts": "2026-06-24T16:38:09.173Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "7f9482fe6b0108f6", + "asn": "24940", + "ts": "2026-06-24T17:08:08.457Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "7758120b8c6558f2", + "asn": "3491", + "ts": "2026-06-24T17:38:09.992Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3db00e67bc9141c9", + "asn": "15290", + "ts": "2026-06-24T17:38:11.713Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "42ed0165398e888f", + "asn": "34702", + "ts": "2026-06-24T17:38:11.842Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "5d9d9b48957cf8a2", + "asn": "132372", + "ts": "2026-06-24T17:38:12.149Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "8fb2e70efc0159c2", + "asn": "396986", + "ts": "2026-06-24T20:38:11.369Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.236.0/22", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "543759814bc94386", + "asn": "22616", + "ts": "2026-06-24T21:08:10.871Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "36a402390d0573d5", + "asn": "138699", + "ts": "2026-06-24T22:38:09.214Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "3b07510ee20d4c31", + "asn": "24940", + "ts": "2026-06-24T23:38:08.411Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "2b396286610b8276", + "asn": "3491", + "ts": "2026-06-25T00:08:09.377Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "a07fa56c4d8a85b9", + "asn": "15290", + "ts": "2026-06-25T00:08:09.645Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 24 missing" + }, + { + "id": "c48ab18e57c534fa", + "asn": "34702", + "ts": "2026-06-25T00:08:09.772Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e5ce0620146d4b17", + "asn": "132372", + "ts": "2026-06-25T00:08:10.091Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0a313545a629ff1c", + "asn": "396986", + "ts": "2026-06-25T03:08:08.717Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "7a7a6a38b21ae789", + "asn": "22616", + "ts": "2026-06-25T03:38:11.559Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "4523bb14a6948376", + "asn": "138699", + "ts": "2026-06-25T05:08:09.304Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "2dbb51349a4a9669", + "asn": "24940", + "ts": "2026-06-25T05:38:08.635Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "56ea953562e20174", + "asn": "15290", + "ts": "2026-06-25T06:08:09.905Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 24 missing" + }, + { + "id": "f32862239c3b53a4", + "asn": "34702", + "ts": "2026-06-25T06:08:10.026Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "0db5b3fcc8b54e4d", + "asn": "132372", + "ts": "2026-06-25T06:08:10.357Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "fa9b16f7587fb1b1", + "asn": "3491", + "ts": "2026-06-25T06:38:09.210Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "7b7d27539aefee85", + "asn": "396986", + "ts": "2026-06-25T09:08:09.115Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "e467b81b699247ff", + "asn": "22616", + "ts": "2026-06-25T10:08:09.867Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "6f58af7501072c9e", + "asn": "138699", + "ts": "2026-06-25T11:38:08.694Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c4e6cdab27c0e295", + "asn": "24940", + "ts": "2026-06-25T12:08:08.434Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d6ea77e3bb8a4a5b", + "asn": "15290", + "ts": "2026-06-25T12:08:10.403Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 24 missing" + }, + { + "id": "ed3af45d70c99ba2", + "asn": "34702", + "ts": "2026-06-25T12:08:10.539Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e145af532dcb0dcc", + "asn": "132372", + "ts": "2026-06-25T12:08:10.912Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d6d0465ff93d5220", + "asn": "3491", + "ts": "2026-06-25T12:38:09.491Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "817202b0d252ee40", + "asn": "396986", + "ts": "2026-06-25T15:38:09.110Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.236.0/22", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 1 missing" + }, + { + "id": "a3fc7d4abcee60ab", + "asn": "22616", + "ts": "2026-06-25T16:08:19.340Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "cdb4d278a2f45d6e", + "asn": "138699", + "ts": "2026-06-25T17:38:08.949Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "b7d78e96808d55c3", + "asn": "24940", + "ts": "2026-06-25T18:38:08.395Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d42afa511c213875", + "asn": "15290", + "ts": "2026-06-25T18:38:09.647Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 24 missing" + }, + { + "id": "53b990efdafe4753", + "asn": "34702", + "ts": "2026-06-25T18:38:09.770Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "1625a544a0e3a957", + "asn": "132372", + "ts": "2026-06-25T18:38:09.979Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "98fc96964c4875b5", + "asn": "3491", + "ts": "2026-06-25T19:08:09.859Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "ec9e891faa2782c8", + "asn": "396986", + "ts": "2026-06-25T22:08:08.742Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "bea03e8bc9f62d8a", + "asn": "22616", + "ts": "2026-06-25T22:38:10.830Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "31e4e4f10d8f2091", + "asn": "138699", + "ts": "2026-06-25T23:38:09.099Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "5fe77dc9c0ac59fc", + "asn": "24940", + "ts": "2026-06-26T00:38:08.419Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "4aaa32ede3a44d3f", + "asn": "34702", + "ts": "2026-06-26T00:38:09.771Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "bc167dc654173824", + "asn": "132372", + "ts": "2026-06-26T00:38:10.072Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "ca4e7263815b0220", + "asn": "15290", + "ts": "2026-06-26T01:08:09.931Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 24 missing" + }, + { + "id": "9da344a06a945f46", + "asn": "3491", + "ts": "2026-06-26T01:38:10.701Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "b40d436d323ba048", + "asn": "396986", + "ts": "2026-06-26T04:08:08.760Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "3b2d8563d14fa4f4", + "asn": "22616", + "ts": "2026-06-26T04:38:10.840Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "11a796fd6e36d036", + "asn": "138699", + "ts": "2026-06-26T06:08:09.121Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "2528106807469b2c", + "asn": "24940", + "ts": "2026-06-26T07:08:08.436Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5bb1cbd07a06162e", + "asn": "15290", + "ts": "2026-06-26T07:08:17.245Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "16711fc7eacfd3e4", + "asn": "34702", + "ts": "2026-06-26T07:08:17.487Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3a77611a7c97562d", + "asn": "132372", + "ts": "2026-06-26T07:08:19.825Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "16098c10f00a7aff", + "asn": "3491", + "ts": "2026-06-26T08:08:09.353Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "159bc9431f68b733", + "asn": "396986", + "ts": "2026-06-26T10:08:09.285Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "0f5f8a3de6fc013f", + "asn": "22616", + "ts": "2026-06-26T11:08:15.260Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "4fa6068e383b8afa", + "asn": "138699", + "ts": "2026-06-26T12:38:09.159Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1d239d8bed6d2b88", + "asn": "24940", + "ts": "2026-06-26T13:08:08.570Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "467abe032229d933", + "asn": "199121", + "ts": "2026-06-26T13:38:16.302Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "872af6fa7c1c0b6e", + "asn": "15290", + "ts": "2026-06-26T13:38:17.528Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "90fd93b152ef0c17", + "asn": "34702", + "ts": "2026-06-26T13:38:17.645Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "81a3ccf24f0f5b6e", + "asn": "132372", + "ts": "2026-06-26T13:38:18.013Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d5f92f36dfe5e192", + "asn": "3491", + "ts": "2026-06-26T14:08:09.354Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "4be5fec3ab25918a", + "asn": "396986", + "ts": "2026-06-26T16:08:11.189Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "93c1be0904f2c353", + "asn": "22616", + "ts": "2026-06-26T17:38:10.904Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "617aba60ec55916e", + "asn": "138699", + "ts": "2026-06-26T19:08:08.953Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "13663bffcbd0351e", + "asn": "24940", + "ts": "2026-06-26T19:38:08.419Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "9268c4ee27cd91fc", + "asn": "15290", + "ts": "2026-06-26T20:08:09.517Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "57cb68d4ff35c985", + "asn": "34702", + "ts": "2026-06-26T20:08:09.632Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "8f51cca9d9952c11", + "asn": "132372", + "ts": "2026-06-26T20:08:09.937Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "b11195eabc8f245f", + "asn": "3491", + "ts": "2026-06-26T20:38:09.659Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "334f3421cd6c7dc2", + "asn": "142631", + "ts": "2026-06-26T21:38:18.110Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "103.171.104.0/23", + "103.171.105.0/24", + "160.191.18.0/24", + "103.171.104.0/24", + "103.229.232.0/24", + "103.208.66.0/24", + "2407:c2c0::/32", + "160.191.19.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS142631: 0 unexpected prefix(es), 8 missing" + }, + { + "id": "d987b4f97205d8ab", + "asn": "396986", + "ts": "2026-06-26T22:38:08.735Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "a1a6b5b2f6722aa8", + "asn": "22616", + "ts": "2026-06-27T00:08:11.272Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "83e97879aed1e2b9", + "asn": "24940", + "ts": "2026-06-27T01:38:08.422Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "aa81e44a20ba4aba", + "asn": "138699", + "ts": "2026-06-27T01:38:08.757Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "25efdb0dcf0fbd4b", + "asn": "15290", + "ts": "2026-06-27T02:08:09.672Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "c10e398950a4e666", + "asn": "34702", + "ts": "2026-06-27T02:08:09.791Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "05f0b919ce91745a", + "asn": "132372", + "ts": "2026-06-27T02:08:10.073Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "928a0e5c41837c87", + "asn": "3491", + "ts": "2026-06-27T03:08:11.389Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "8e343508ed2e6259", + "asn": "396986", + "ts": "2026-06-27T04:38:08.758Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "809285b610933179", + "asn": "22616", + "ts": "2026-06-27T06:38:10.972Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "656543b1494709ad", + "asn": "24940", + "ts": "2026-06-27T07:38:08.425Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "1c5d0990025dc43d", + "asn": "138699", + "ts": "2026-06-27T08:08:08.836Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a918b31cd66da1f9", + "asn": "15290", + "ts": "2026-06-27T08:08:09.673Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "79e20b541bf7c79d", + "asn": "34702", + "ts": "2026-06-27T08:08:09.803Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b54a420362261619", + "asn": "132372", + "ts": "2026-06-27T08:08:10.110Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "466b5bcc7b059c77", + "asn": "3491", + "ts": "2026-06-27T09:38:09.285Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "0c424ecb55a6ed47", + "asn": "396986", + "ts": "2026-06-27T11:08:09.233Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "b77c69b598f4e686", + "asn": "22616", + "ts": "2026-06-27T13:08:12.557Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "aaf954453e8d94ef", + "asn": "24940", + "ts": "2026-06-27T13:38:08.429Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5d623d932f1c0d57", + "asn": "138699", + "ts": "2026-06-27T14:38:08.703Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "78b975e3bd08dad4", + "asn": "15290", + "ts": "2026-06-27T14:38:09.658Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "c8ab05fdaf5b1249", + "asn": "34702", + "ts": "2026-06-27T14:38:09.789Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "a4dffb9c12dc841c", + "asn": "132372", + "ts": "2026-06-27T14:38:10.097Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "7d467478773e7f49", + "asn": "3491", + "ts": "2026-06-27T16:08:09.592Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "03170797e0799315", + "asn": "396986", + "ts": "2026-06-27T17:38:08.740Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "b02323fca77729da", + "asn": "24940", + "ts": "2026-06-27T19:38:08.439Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "0fdf58b80e9351cd", + "asn": "22616", + "ts": "2026-06-27T19:38:10.794Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "b7c8aaf5afe51f57", + "asn": "138699", + "ts": "2026-06-27T20:38:08.849Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "cdfd3e1d6f03df02", + "asn": "15290", + "ts": "2026-06-27T20:38:09.687Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "0f8bd94ca99ef5b8", + "asn": "34702", + "ts": "2026-06-27T20:38:09.819Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e02df4a3db516723", + "asn": "132372", + "ts": "2026-06-27T20:38:10.130Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "27fbce2479890d79", + "asn": "3491", + "ts": "2026-06-27T22:38:09.305Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "75ba91c4e8325b6d", + "asn": "396986", + "ts": "2026-06-27T23:38:08.773Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "6b479aba6a8f0f87", + "asn": "24940", + "ts": "2026-06-28T01:38:08.442Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "644f52b373aafd8b", + "asn": "22616", + "ts": "2026-06-28T01:38:11.178Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "8a2609e83e49e631", + "asn": "138699", + "ts": "2026-06-28T02:38:08.882Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ab7c14e880cb2ac0", + "asn": "15290", + "ts": "2026-06-28T02:38:09.762Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "117ad16de298e6ac", + "asn": "34702", + "ts": "2026-06-28T02:38:09.889Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "dd6334f150e68055", + "asn": "132372", + "ts": "2026-06-28T03:08:17.575Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f3b948ef50954401", + "asn": "3491", + "ts": "2026-06-28T04:38:09.559Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "fffdd1822c4c0625", + "asn": "396986", + "ts": "2026-06-28T05:38:09.204Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "e5484b2c8719f1db", + "asn": "24940", + "ts": "2026-06-28T07:38:08.589Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "9354fc2bc7e43559", + "asn": "22616", + "ts": "2026-06-28T07:38:13.254Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "a62d0ab77130081a", + "asn": "138699", + "ts": "2026-06-28T08:38:09.218Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "48ebaf9f715f3d6b", + "asn": "15290", + "ts": "2026-06-28T08:38:12.027Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "f7f4e5825b624c8c", + "asn": "34702", + "ts": "2026-06-28T08:38:12.163Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "7eb7ddfe5fec38d7", + "asn": "132372", + "ts": "2026-06-28T09:38:10.370Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "fa243dfe271fb8c2", + "asn": "3491", + "ts": "2026-06-28T10:38:16.567Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1214a5a6a2b6f5eb", + "asn": "396986", + "ts": "2026-06-28T12:08:08.910Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "8db410b2965151ae", + "asn": "24940", + "ts": "2026-06-28T14:08:08.440Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "8991ecb62cc8a5c0", + "asn": "22616", + "ts": "2026-06-28T14:08:10.997Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "33152b4188903a8b", + "asn": "138699", + "ts": "2026-06-28T14:38:09.250Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "2834db5a052ef861", + "asn": "15290", + "ts": "2026-06-28T15:08:09.944Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "aeaa2f7f2c335b09", + "asn": "34702", + "ts": "2026-06-28T15:08:10.073Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e48c6f15fb91d8cf", + "asn": "132372", + "ts": "2026-06-28T15:38:10.409Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "cd87cd3e9957e039", + "asn": "3491", + "ts": "2026-06-28T17:08:09.372Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "ce832ed93fa051eb", + "asn": "396986", + "ts": "2026-06-28T18:38:09.040Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "b245823dba8391fc", + "asn": "24940", + "ts": "2026-06-28T20:38:08.456Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "3f6b2e1b05cd0f8c", + "asn": "138699", + "ts": "2026-06-28T20:38:09.318Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ef93c3ae91d3e4e4", + "asn": "22616", + "ts": "2026-06-28T20:38:10.827Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "2c1e65b8f15e7560", + "asn": "15290", + "ts": "2026-06-28T21:38:09.700Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "cecba1598e798602", + "asn": "34702", + "ts": "2026-06-28T21:38:09.814Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f5096f4ae40574c7", + "asn": "132372", + "ts": "2026-06-28T22:08:11.118Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "348e7f09d6bbaf45", + "asn": "3491", + "ts": "2026-06-28T23:38:09.771Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "ee32076d27e360cc", + "asn": "396986", + "ts": "2026-06-29T00:38:09.176Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "0a0cb5560f186a0f", + "asn": "22616", + "ts": "2026-06-29T02:38:11.763Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "409caf6589952627", + "asn": "24940", + "ts": "2026-06-29T03:08:08.447Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c01389d31278b4c0", + "asn": "138699", + "ts": "2026-06-29T03:08:08.846Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "33052d51a0d60ad2", + "asn": "15290", + "ts": "2026-06-29T03:38:10.331Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "4f697b72ed0d6381", + "asn": "34702", + "ts": "2026-06-29T03:38:10.450Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2006ba6c7d1446c1", + "asn": "132372", + "ts": "2026-06-29T04:38:11.404Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "461c16525c81ebcb", + "asn": "3491", + "ts": "2026-06-29T05:38:09.934Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "8a6d55c951a0cdf1", + "asn": "396986", + "ts": "2026-06-29T07:08:09.300Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "d458f5d372f2e415", + "asn": "22616", + "ts": "2026-06-29T08:38:16.521Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "0bdbf2fae417e08a", + "asn": "24940", + "ts": "2026-06-29T09:08:08.452Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "4b41f86573e825cc", + "asn": "138699", + "ts": "2026-06-29T09:38:09.326Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "46c423b9f5ff321a", + "asn": "15290", + "ts": "2026-06-29T09:38:10.412Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "807029444c389858", + "asn": "34702", + "ts": "2026-06-29T09:38:10.534Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d251ff13960dc734", + "asn": "132372", + "ts": "2026-06-29T11:08:10.560Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "45bc12f370fc8d5a", + "asn": "3491", + "ts": "2026-06-29T11:38:10.778Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "4358e0393f88cb03", + "asn": "396986", + "ts": "2026-06-29T13:38:08.754Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 1 missing" + }, + { + "id": "d7bab1a21594a4a4", + "asn": "24940", + "ts": "2026-06-29T15:08:08.457Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "feb7c66b0145e609", + "asn": "22616", + "ts": "2026-06-29T15:08:10.834Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "75bea58cd6e91a6e", + "asn": "138699", + "ts": "2026-06-29T15:38:09.947Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "dbdb93288b739f66", + "asn": "15290", + "ts": "2026-06-29T15:38:12.162Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "ec3bfd3f4cd9ca09", + "asn": "34702", + "ts": "2026-06-29T15:38:12.599Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "86701c2d0ded1a31", + "asn": "132372", + "ts": "2026-06-29T17:38:10.601Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0e713f3bd16fb0c5", + "asn": "3491", + "ts": "2026-06-29T18:08:09.736Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "7554ef6092256a57", + "asn": "396986", + "ts": "2026-06-29T19:38:08.767Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 2 missing" + }, + { + "id": "da823c79308a2829", + "asn": "24940", + "ts": "2026-06-29T21:38:08.438Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "8a893c391989138a", + "asn": "22616", + "ts": "2026-06-29T21:38:10.799Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "7b816a2d081b59e2", + "asn": "138699", + "ts": "2026-06-29T22:08:09.283Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a829e4214841e887", + "asn": "15290", + "ts": "2026-06-29T22:08:10.104Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "f0075207ed5f11c6", + "asn": "34702", + "ts": "2026-06-29T22:08:10.236Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "1f50ea9367010f99", + "asn": "132372", + "ts": "2026-06-30T00:08:09.519Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0146c0236a5892ba", + "asn": "3491", + "ts": "2026-06-30T00:38:09.950Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "177205318d1600ad", + "asn": "396986", + "ts": "2026-06-30T02:08:08.755Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 2 missing" + }, + { + "id": "f3b05f9746418659", + "asn": "24940", + "ts": "2026-06-30T03:38:08.444Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "329429c2068a34c0", + "asn": "22616", + "ts": "2026-06-30T04:08:10.215Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "5cc4ed49f0c2d782", + "asn": "138699", + "ts": "2026-06-30T04:38:08.816Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "f519eff8b7a71a21", + "asn": "15290", + "ts": "2026-06-30T04:38:09.693Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "2d3707e5a8391c4c", + "asn": "34702", + "ts": "2026-06-30T04:38:09.821Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f8b0ffe41d1484d2", + "asn": "132372", + "ts": "2026-06-30T06:08:10.394Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "8539c8f5fa9bf2b8", + "asn": "3491", + "ts": "2026-06-30T07:08:09.309Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "4502211641e4fc65", + "asn": "396986", + "ts": "2026-06-30T08:08:08.795Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 2 missing" + }, + { + "id": "edbbc3bec82263ac", + "asn": "24940", + "ts": "2026-06-30T09:38:08.459Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f6d53c012ee367ef", + "asn": "22616", + "ts": "2026-06-30T10:08:10.252Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "67de70f3cd902b68", + "asn": "138699", + "ts": "2026-06-30T10:38:08.890Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "efd0a8b8cf298521", + "asn": "15290", + "ts": "2026-06-30T10:38:09.764Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "5999b646c6555226", + "asn": "34702", + "ts": "2026-06-30T10:38:09.893Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "9a72d2fa1f71b884", + "asn": "132372", + "ts": "2026-06-30T12:38:14.103Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "fda2716b574dee53", + "asn": "3491", + "ts": "2026-06-30T13:08:09.423Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "cb1330968e2a5c87", + "asn": "396986", + "ts": "2026-06-30T14:08:08.938Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 2 missing" + }, + { + "id": "8d2e1eed4466f955", + "asn": "24940", + "ts": "2026-06-30T16:08:09.806Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "86929759aee80d7e", + "asn": "22616", + "ts": "2026-06-30T16:08:27.639Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.114.0/23", + "137.31.101.0/24", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "f1cd87b058b986e3", + "asn": "15290", + "ts": "2026-06-30T16:38:09.797Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "c7ead6916212f7f9", + "asn": "34702", + "ts": "2026-06-30T16:38:09.930Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "76f14acbd61eeeb6", + "asn": "138699", + "ts": "2026-06-30T17:08:08.758Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "f112489bf0074b7f", + "asn": "132372", + "ts": "2026-06-30T19:08:09.504Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "da61d1ae05912fea", + "asn": "3491", + "ts": "2026-06-30T19:38:09.436Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "51103c611c20b52f", + "asn": "396986", + "ts": "2026-06-30T20:38:10.986Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "a052aaa9ef4d3369", + "asn": "24940", + "ts": "2026-06-30T22:38:08.736Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "78672662ffd0fe65", + "asn": "15290", + "ts": "2026-06-30T22:38:17.860Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "8ab547008c8a0997", + "asn": "34702", + "ts": "2026-06-30T22:38:17.983Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "36a7b34a7ee097b2", + "asn": "22616", + "ts": "2026-06-30T22:38:18.990Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "165.225.99.0/24", + "205.220.14.0/23", + "137.31.114.0/23", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "452bebbe3a40b001", + "asn": "138699", + "ts": "2026-06-30T23:08:08.855Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c5481947b7cc09ca", + "asn": "132372", + "ts": "2026-07-01T01:08:10.278Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1cf6ec5eef0f5e66", + "asn": "3491", + "ts": "2026-07-01T02:08:09.415Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bbdb02b2115146fc", + "asn": "396986", + "ts": "2026-07-01T03:08:08.774Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "5b934ec62ccf33ad", + "asn": "24940", + "ts": "2026-07-01T05:08:08.454Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "a786fb39c73d0a62", + "asn": "15290", + "ts": "2026-07-01T05:08:09.570Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "7533ee7319b876e7", + "asn": "34702", + "ts": "2026-07-01T05:08:09.713Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "9f6f7be9fafe4153", + "asn": "22616", + "ts": "2026-07-01T05:08:10.263Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.114.0/23", + "2605:4300:e500::/40", + "205.220.12.0/23", + "165.225.99.0/24", + "137.31.101.0/24", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "d6fa436ba41110d2", + "asn": "138699", + "ts": "2026-07-01T05:38:08.773Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "86491d0351ffd02d", + "asn": "132372", + "ts": "2026-07-01T07:37:45.161Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "e6c7f5dc428a14ca", + "asn": "3491", + "ts": "2026-07-01T08:37:26.916Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1ce762167af2d8fa", + "asn": "396986", + "ts": "2026-07-01T09:37:26.932Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "2610c3d43ae512f9", + "asn": "24940", + "ts": "2026-07-01T11:37:26.081Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "508fc7f1059b7cfd", + "asn": "15290", + "ts": "2026-07-01T11:37:27.082Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "8dfec9af9d51da2b", + "asn": "34702", + "ts": "2026-07-01T11:37:27.209Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "ef82dc88eb9c90ff", + "asn": "22616", + "ts": "2026-07-01T11:37:28.284Z", + "severity": "CRITICAL", + "unexpected": [ + "165.225.99.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "137.31.114.0/23", + "2605:4300:e500::/40", + "205.220.12.0/23", + "205.220.14.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "a9a1f0c0b43e8906", + "asn": "32", + "ts": "2026-07-01T12:07:34.100Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "204.63.224.0/21", + "171.64.0.0/14", + "2607:f6d0::/32", + "128.12.0.0/16", + "2620:6c:40c0::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS32: 0 unexpected prefix(es), 5 missing" + }, + { + "id": "aed9717c5e07a223", + "asn": "138699", + "ts": "2026-07-01T12:07:34.376Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "0d996373737c103c", + "asn": "132372", + "ts": "2026-07-01T14:07:27.496Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c65aad427b640dfd", + "asn": "3491", + "ts": "2026-07-01T14:37:26.920Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "b450df59201a9bd6", + "asn": "396986", + "ts": "2026-07-01T16:07:26.406Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "6d298027cd3dd658", + "asn": "24940", + "ts": "2026-07-01T17:37:26.085Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "abc01ab74fda7000", + "asn": "15290", + "ts": "2026-07-01T17:37:27.365Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "ef753a1547826dcf", + "asn": "34702", + "ts": "2026-07-01T17:37:27.492Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "a0fc6d3013492099", + "asn": "22616", + "ts": "2026-07-01T17:37:28.473Z", + "severity": "CRITICAL", + "unexpected": [ + "165.225.99.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "137.31.114.0/23", + "2605:4300:e500::/40", + "205.220.12.0/23", + "205.220.14.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "3d152c8c3bb44d41", + "asn": "138699", + "ts": "2026-07-01T18:37:26.389Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "578240fb447aead2", + "asn": "132372", + "ts": "2026-07-01T20:07:35.198Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c769d1a38e0966cc", + "asn": "3491", + "ts": "2026-07-01T20:37:26.997Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "925c1b072a1bbcaf", + "asn": "133815", + "ts": "2026-07-01T22:07:36.019Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "103.152.90.0/23", + "103.190.218.0/24", + "103.52.46.0/23", + "103.149.224.0/23", + "103.130.136.0/23", + "103.190.216.0/23", + "103.150.14.0/23", + "103.149.224.0/24", + "103.130.136.0/24", + "103.188.52.0/24", + "103.190.218.0/23", + "103.130.138.0/23", + "103.141.150.0/23", + "103.149.233.0/24", + "103.150.16.0/23", + "103.190.219.0/24", + "103.149.230.0/23", + "103.52.46.0/24", + "103.152.96.0/24", + "103.152.110.0/23", + "103.150.34.0/23", + "103.188.53.0/24", + "103.188.50.0/23", + "103.150.4.0/23", + "103.52.45.0/24", + "103.188.52.0/23", + "103.149.234.0/23", + "103.141.150.0/24", + "103.52.47.0/24", + "103.130.136.0/22", + "103.141.152.0/24", + "103.152.96.0/23", + "103.150.12.0/23", + "103.188.50.0/24", + "103.190.220.0/23", + "103.130.137.0/24", + "103.141.151.0/24", + "103.52.44.0/22", + "103.52.44.0/23", + "103.188.41.0/24", + "103.188.40.0/23", + "103.149.232.0/24", + "103.151.194.0/23", + "103.149.225.0/24", + "103.141.153.0/24", + "103.188.40.0/24", + "103.151.18.0/23", + "2403:bac0::/32", + "103.52.44.0/24", + "103.151.100.0/23", + "2403:57c0::/32", + "103.141.152.0/23", + "103.149.235.0/24", + "103.149.234.0/24", + "103.152.70.0/23", + "103.188.51.0/24", + "103.149.232.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS133815: 0 unexpected prefix(es), 57 missing" + }, + { + "id": "f0202f07477dc26a", + "asn": "396986", + "ts": "2026-07-01T22:07:36.099Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "45bfceaf675d6497", + "asn": "24940", + "ts": "2026-07-01T23:37:26.090Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c764ef54e9a24428", + "asn": "22616", + "ts": "2026-07-01T23:37:28.530Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "2605:4300:e500::/40", + "205.220.12.0/23", + "165.225.99.0/24", + "137.31.122.0/23", + "205.220.14.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "e9862d00231017d9", + "asn": "15290", + "ts": "2026-07-02T00:07:27.628Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "c64c2ec49e4f6d5f", + "asn": "34702", + "ts": "2026-07-02T00:07:27.758Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f1542582da62b172", + "asn": "138699", + "ts": "2026-07-02T01:07:27.370Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ffe47486267cd6db", + "asn": "3491", + "ts": "2026-07-02T02:37:28.860Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3ebc5dd25615b5c5", + "asn": "132372", + "ts": "2026-07-02T02:37:29.503Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "26d506f5252b18c6", + "asn": "396986", + "ts": "2026-07-02T04:37:26.450Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "1a9366c4ed22c6c7", + "asn": "24940", + "ts": "2026-07-02T06:07:26.263Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "2f88e4d2ad190ee7", + "asn": "22616", + "ts": "2026-07-02T06:07:35.451Z", + "severity": "CRITICAL", + "unexpected": [ + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.122.0/23", + "137.31.114.0/23", + "205.220.14.0/23", + "137.31.101.0/24", + "205.220.12.0/23", + "140.232.190.0/24", + "165.225.99.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "0824ad74c8d81685", + "asn": "15290", + "ts": "2026-07-02T06:37:27.221Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "da6c0b5dc4fb0456", + "asn": "34702", + "ts": "2026-07-02T06:37:27.347Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "6e0e72854f170cb6", + "asn": "138699", + "ts": "2026-07-02T07:37:26.422Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "b0fa3055a812247b", + "asn": "3491", + "ts": "2026-07-02T09:07:27.056Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "52b5109d978ee813", + "asn": "132372", + "ts": "2026-07-02T09:07:27.823Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "8a55b50c5a086d50", + "asn": "396986", + "ts": "2026-07-02T11:07:26.393Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "13dcd8ced9ccfcc6", + "asn": "24940", + "ts": "2026-07-02T12:37:26.077Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "111ef9cf53503dbc", + "asn": "15290", + "ts": "2026-07-02T12:37:27.229Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "211a0a67f045858f", + "asn": "22616", + "ts": "2026-07-02T12:37:28.334Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "140.232.190.0/24", + "137.31.122.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "140.232.189.0/24", + "205.220.12.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "c599f2c053e92fae", + "asn": "34702", + "ts": "2026-07-02T13:07:27.554Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "42c9d4bcfffb3926", + "asn": "138699", + "ts": "2026-07-02T14:07:26.509Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "43b5390273bdc1ba", + "asn": "3491", + "ts": "2026-07-02T15:37:26.539Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bc2c4149a4c9e0bc", + "asn": "132372", + "ts": "2026-07-02T15:37:27.320Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "ac2720d713dcbc98", + "asn": "396986", + "ts": "2026-07-02T17:07:29.976Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "8d422d70a275692a", + "asn": "24940", + "ts": "2026-07-02T18:37:26.108Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "18a46078e2f140cf", + "asn": "15290", + "ts": "2026-07-02T18:37:27.291Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "6420f9c7051f630d", + "asn": "22616", + "ts": "2026-07-02T18:37:28.418Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "140.232.190.0/24", + "137.31.122.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "140.232.189.0/24", + "205.220.12.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "679866a9fc118456", + "asn": "34702", + "ts": "2026-07-02T19:37:27.382Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "c3a457eac57bf186", + "asn": "138699", + "ts": "2026-07-02T20:07:26.621Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a69875730958a5c2", + "asn": "3491", + "ts": "2026-07-02T21:37:26.948Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "61d930624ba58c38", + "asn": "132372", + "ts": "2026-07-02T21:37:27.886Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "50292865c18f71e4", + "asn": "396986", + "ts": "2026-07-02T23:37:26.476Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "c8e8bdd70ac2d384", + "asn": "24940", + "ts": "2026-07-03T01:07:26.089Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "95adaaf3b411eab4", + "asn": "15290", + "ts": "2026-07-03T01:07:27.233Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "8eab907099b71815", + "asn": "22616", + "ts": "2026-07-03T01:07:27.860Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.190.0/24", + "137.31.101.0/24", + "137.31.122.0/23", + "165.225.99.0/24", + "140.232.189.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.114.0/23", + "205.220.12.0/23", + "205.220.14.0/23", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "49b46549f6cc4c35", + "asn": "34702", + "ts": "2026-07-03T01:37:27.432Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "205bd9d019cffd7d", + "asn": "138699", + "ts": "2026-07-03T02:07:26.661Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "85de2fe33b08ecfb", + "asn": "3491", + "ts": "2026-07-03T04:37:39.374Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "038531775d85c296", + "asn": "132372", + "ts": "2026-07-03T04:37:40.090Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "163b35ccfa8ded9f", + "asn": "396986", + "ts": "2026-07-03T05:37:38.778Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "d4c1517d7841a525", + "asn": "24940", + "ts": "2026-07-03T07:07:38.451Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "193.105.82.0/24", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "9d1ff8a84286ea09", + "asn": "15290", + "ts": "2026-07-03T07:07:39.608Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "8419d1ea81434ed0", + "asn": "22616", + "ts": "2026-07-03T07:07:40.270Z", + "severity": "CRITICAL", + "unexpected": [ + "155.95.86.0/24", + "165.225.99.0/24", + "140.232.190.0/24", + "137.31.101.0/24", + "205.220.14.0/23", + "140.232.189.0/24", + "2605:4300:e500::/40", + "205.220.12.0/23", + "137.31.122.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "377d67e9e2b855a1", + "asn": "34702", + "ts": "2026-07-03T07:37:39.835Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "6fe50a542bc94fb8", + "asn": "138699", + "ts": "2026-07-03T08:07:38.805Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "af03a8e0300b78a7", + "asn": "3491", + "ts": "2026-07-03T11:07:39.397Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3cc52a426ef24ff5", + "asn": "132372", + "ts": "2026-07-03T11:07:40.150Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "2da73fba0040682d", + "asn": "396986", + "ts": "2026-07-03T11:37:38.871Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "fa5b2ba4b295a85f", + "asn": "15290", + "ts": "2026-07-03T13:07:39.639Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "5c70a0846d816058", + "asn": "24940", + "ts": "2026-07-03T13:37:38.460Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "193.105.82.0/24", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "2e9324d31d0bcafa", + "asn": "34702", + "ts": "2026-07-03T13:37:48.020Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "372542b9e2480c99", + "asn": "22616", + "ts": "2026-07-03T13:37:49.041Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "137.31.128.0/23", + "137.31.114.0/23", + "155.95.86.0/24", + "137.31.120.0/23", + "137.31.101.0/24", + "137.31.122.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "140.232.190.0/24", + "137.31.124.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "5f6b2b33ec6c1b25", + "asn": "138699", + "ts": "2026-07-03T14:07:38.917Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "f7275b24e27a8288", + "asn": "199121", + "ts": "2026-07-03T15:37:46.325Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "87032c1d8cfc1279", + "asn": "396986", + "ts": "2026-07-03T17:37:38.944Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "16237d50eae1948c", + "asn": "3491", + "ts": "2026-07-03T17:37:39.499Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3d2f683712ef0e6b", + "asn": "132372", + "ts": "2026-07-03T17:37:40.464Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c4e1b6a99545a917", + "asn": "15290", + "ts": "2026-07-03T19:07:39.678Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "c2513b083cdcdd3e", + "asn": "24940", + "ts": "2026-07-03T19:37:38.480Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "936c44216c5d7953", + "asn": "138699", + "ts": "2026-07-03T20:07:40.366Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "f4846ed49a1211f4", + "asn": "34702", + "ts": "2026-07-03T20:07:41.192Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "62f9939faaaa1168", + "asn": "22616", + "ts": "2026-07-03T20:07:41.727Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "137.31.101.0/24", + "137.31.119.0/24", + "205.220.12.0/23", + "165.225.99.0/24", + "137.31.120.0/23", + "155.95.86.0/24", + "137.31.122.0/23", + "137.31.128.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "2605:4300:e500::/40", + "205.220.14.0/23", + "137.31.124.0/23", + "140.232.189.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "2c25a65652e2bb3d", + "asn": "396986", + "ts": "2026-07-04T00:07:38.781Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "f7ca85f8d1c42212", + "asn": "3491", + "ts": "2026-07-04T00:07:39.347Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bb9a2abcf9c2c9e9", + "asn": "132372", + "ts": "2026-07-04T00:07:39.997Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c1bfda5b20d5af04", + "asn": "15290", + "ts": "2026-07-04T01:07:47.868Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "4536eb0a097b5c2e", + "asn": "24940", + "ts": "2026-07-04T02:07:38.445Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "7c575b6fae708149", + "asn": "138699", + "ts": "2026-07-04T02:37:38.836Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "0da9e49d10058ab1", + "asn": "34702", + "ts": "2026-07-04T02:37:39.893Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d79aec7f6234ae49", + "asn": "22616", + "ts": "2026-07-04T02:37:40.778Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "137.31.101.0/24", + "137.31.119.0/24", + "205.220.12.0/23", + "165.225.99.0/24", + "137.31.120.0/23", + "155.95.86.0/24", + "137.31.122.0/23", + "137.31.128.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "2605:4300:e500::/40", + "205.220.14.0/23", + "137.31.124.0/23", + "140.232.189.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "4a8518532881fb1b", + "asn": "396986", + "ts": "2026-07-04T06:36:50.510Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "13dbdd0a4ca15aaf", + "asn": "3491", + "ts": "2026-07-04T06:36:51.076Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "acafec976b610972", + "asn": "132372", + "ts": "2026-07-04T06:36:51.712Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "25af96e89bb6b706", + "asn": "15290", + "ts": "2026-07-04T07:36:51.503Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "9c42642360d244a2", + "asn": "24940", + "ts": "2026-07-04T08:36:50.272Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "9fdb7fafb4e75238", + "asn": "138699", + "ts": "2026-07-04T09:06:50.606Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c92cfd571c6c6827", + "asn": "34702", + "ts": "2026-07-04T09:06:51.591Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "818b0f2777d05362", + "asn": "22616", + "ts": "2026-07-04T09:06:52.123Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "137.31.126.0/23", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.14.0/23", + "137.31.124.0/23", + "140.232.189.0/24", + "137.31.101.0/24", + "137.31.120.0/23", + "137.31.114.0/23", + "137.31.122.0/23", + "205.220.12.0/23", + "140.232.190.0/24", + "165.225.99.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "416a1da10d4b3ded", + "asn": "396986", + "ts": "2026-07-04T12:36:50.621Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "c07e83e8499d6044", + "asn": "3491", + "ts": "2026-07-04T12:36:51.208Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1aa94b468431cc80", + "asn": "132372", + "ts": "2026-07-04T12:36:51.963Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0d6b225b962012d1", + "asn": "15290", + "ts": "2026-07-04T14:06:51.466Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "f44325dab73ca733", + "asn": "24940", + "ts": "2026-07-04T14:36:50.283Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c503a29a211c00f1", + "asn": "138699", + "ts": "2026-07-04T15:06:50.607Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "182e3554f93cfdd6", + "asn": "34702", + "ts": "2026-07-04T15:36:51.891Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "04f0dfc38b54d523", + "asn": "22616", + "ts": "2026-07-04T15:36:53.000Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.126.0/23", + "140.232.189.0/24", + "137.31.120.0/23", + "137.31.122.0/23", + "205.220.12.0/23", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.128.0/23", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.114.0/23", + "140.232.190.0/24", + "137.31.101.0/24", + "165.225.99.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "2d6c4b09b9effa76", + "asn": "396986", + "ts": "2026-07-04T19:06:50.638Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "e00cd34604830bda", + "asn": "3491", + "ts": "2026-07-04T19:06:51.217Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bd836b49d40589f6", + "asn": "132372", + "ts": "2026-07-04T19:06:51.987Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "7b21541f7652315d", + "asn": "15290", + "ts": "2026-07-04T20:36:51.442Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "85540a0500b00a8c", + "asn": "24940", + "ts": "2026-07-04T21:06:50.279Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "a08dfcc80612e146", + "asn": "138699", + "ts": "2026-07-04T21:06:51.021Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "569092c30f24a667", + "asn": "34702", + "ts": "2026-07-04T22:06:51.457Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "09a4dccb0564596c", + "asn": "22616", + "ts": "2026-07-04T22:06:51.969Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.124.0/23", + "140.232.189.0/24", + "140.232.190.0/24", + "137.31.120.0/23", + "137.31.126.0/23", + "205.220.14.0/23", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.12.0/23", + "137.31.114.0/23", + "137.31.128.0/23", + "165.225.99.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "7f70f7c0755725e6", + "asn": "396986", + "ts": "2026-07-05T01:36:50.593Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "8c3d15b36ec33e47", + "asn": "3491", + "ts": "2026-07-05T01:36:51.145Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "d068bcad26cf451f", + "asn": "132372", + "ts": "2026-07-05T01:36:51.871Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "482a8cd45bac3d0d", + "asn": "15290", + "ts": "2026-07-05T02:36:51.485Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "eaed654535872777", + "asn": "24940", + "ts": "2026-07-05T03:06:50.279Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "0303649a4d6b8a6d", + "asn": "138699", + "ts": "2026-07-05T03:36:50.676Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "5c60b8e551916acc", + "asn": "34702", + "ts": "2026-07-05T04:36:24.611Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f640430653f42f69", + "asn": "22616", + "ts": "2026-07-05T04:36:25.670Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.119.0/24", + "140.232.190.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.120.0/23", + "137.31.114.0/23", + "205.220.12.0/23", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.126.0/23", + "137.31.122.0/23", + "140.232.189.0/24", + "137.31.101.0/24", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "dc6d9318e5d3b9e4", + "asn": "396986", + "ts": "2026-07-05T08:06:23.576Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "101.45.6.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "6b7f9173ad079bc8", + "asn": "3491", + "ts": "2026-07-05T08:06:24.185Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bb32ceacb6636dba", + "asn": "132372", + "ts": "2026-07-05T08:06:24.848Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "6ab80dc6fcb799fb", + "asn": "15290", + "ts": "2026-07-05T09:06:24.471Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "260e85a672cce5bd", + "asn": "24940", + "ts": "2026-07-05T09:36:23.310Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "6b71a9786a86555a", + "asn": "138699", + "ts": "2026-07-05T10:06:23.619Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "396b3f536a44c3ab", + "asn": "34702", + "ts": "2026-07-05T11:06:24.654Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e31aaa9a1e2d73e5", + "asn": "22616", + "ts": "2026-07-05T11:06:25.193Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.119.0/24", + "140.232.190.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.120.0/23", + "137.31.114.0/23", + "205.220.12.0/23", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.126.0/23", + "137.31.122.0/23", + "140.232.189.0/24", + "137.31.101.0/24", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "eda24514af11d0d4", + "asn": "396986", + "ts": "2026-07-05T14:06:23.607Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "101.45.202.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "503d4fceab155856", + "asn": "3491", + "ts": "2026-07-05T14:06:31.633Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "72.57.243.0/24", + "41.79.245.0/24", + "63.218.0.0/22", + "205.252.8.0/22", + "41.221.208.0/24", + "63.223.48.0/24", + "63.222.250.0/24", + "63.222.54.0/24", + "217.113.92.0/24", + "208.13.224.0/19", + "63.217.112.0/21", + "63.218.254.0/23", + "205.252.192.0/24", + "205.252.232.0/21", + "207.226.120.0/21", + "205.177.116.0/24", + "63.217.24.0/23", + "146.222.27.0/24", + "63.218.18.0/23", + "2400:8800:f80d::/48", + "207.176.117.0/24", + "2400:8800:1::/48", + "205.177.17.0/24", + "63.222.146.0/24", + "63.218.230.0/23", + "63.216.152.0/22", + "103.17.28.0/22", + "63.222.158.0/24", + "63.222.210.0/24", + "217.113.88.0/24", + "205.177.52.0/22", + "2400:8800:f810::/48", + "72.57.134.0/24", + "63.223.7.0/24", + "87.82.0.0/19", + "63.218.52.0/22", + "45.195.111.0/24", + "63.222.105.0/24", + "2400:8800:2000::/35", + "207.226.252.0/23", + "63.221.171.0/24", + "146.222.28.0/24", + "63.222.185.0/24", + "63.218.56.0/23", + "209.8.196.0/22", + "63.222.64.0/24", + "63.222.156.0/24", + "63.217.208.0/22", + "205.177.10.0/24", + "63.222.189.0/24", + "205.177.56.0/22", + "206.161.232.0/22", + "199.13.0.0/19", + "2400:8800:fc05::/48", + "63.222.16.0/21", + "2400:8800:f80a::/48", + "63.222.163.0/24", + "2400:8800:102::/48", + "199.12.96.0/19", + "63.218.107.0/24", + "63.217.66.0/24", + "217.113.86.0/24", + "63.217.103.0/24", + "63.218.112.0/23", + "2400:8800:fc0f::/48", + "209.8.116.0/24", + "63.218.240.0/23", + "2400:8800:4201::/48", + "205.177.0.0/16", + "63.218.246.0/23", + "209.9.24.0/22", + "63.221.128.0/21", + "2400:8800:f822::/48", + "217.156.160.0/21", + "63.218.213.0/24", + "82.109.112.0/20", + "63.218.36.0/22", + "63.218.100.0/23", + "63.218.76.0/23", + "146.222.239.0/24", + "209.9.48.0/21", + "41.221.216.0/22", + "63.222.93.0/24", + "2400:8800:1001::/48", + "205.252.108.0/22", + "146.222.187.0/24", + "63.216.149.0/24", + "205.252.136.0/24", + "63.222.160.0/24", + "63.223.14.0/24", + "63.222.45.0/24", + "63.218.122.0/23", + "63.216.48.0/21", + "205.252.16.0/22", + "206.161.115.0/24", + "63.218.22.0/23", + "203.170.52.0/22", + "41.79.248.0/24", + "116.66.212.0/22", + "63.222.35.0/24", + "209.9.137.0/24", + "207.226.60.0/24", + "72.57.240.0/24", + "63.222.150.0/24", + "82.110.160.0/19", + "72.57.250.0/24", + "206.161.88.0/24", + "63.223.128.0/24", + "72.57.244.0/24", + "63.218.146.0/23", + "209.8.3.0/24", + "149.134.175.0/24", + "209.9.48.0/24", + "146.222.18.0/24", + "72.57.132.0/24", + "72.57.249.0/24", + "63.223.19.0/24", + "63.218.166.0/23", + "63.220.64.0/18", + "63.218.172.0/23", + "63.223.152.0/24", + "63.223.25.0/24", + "63.223.1.0/24", + "63.223.16.0/24", + "209.8.8.0/21", + "63.223.22.0/24", + "63.221.169.0/24", + "205.177.84.0/22", + "72.57.246.0/24", + "2606:9dc0:fc00::/48", + "63.216.242.0/24", + "63.222.153.0/24", + "63.218.204.0/23", + "146.222.118.0/24", + "63.218.43.0/24", + "207.176.8.0/21", + "168.151.28.0/24", + "209.9.82.0/23", + "63.218.8.0/24", + "212.212.128.0/17", + "206.161.112.0/23", + "63.222.61.0/24", + "63.222.16.0/24", + "209.8.176.0/21", + "63.218.192.0/23", + "207.226.0.0/16", + "209.9.112.0/21", + "63.218.6.0/23", + "63.219.19.0/24", + "146.222.48.0/24", + "63.217.16.0/23", + "63.217.59.0/24", + "196.50.128.0/18", + "63.222.104.0/24", + "63.219.16.0/22", + "63.218.124.0/23", + "63.223.6.0/24", + "63.216.14.0/24", + "63.218.170.0/23", + "146.222.46.0/24", + "72.57.251.0/24", + "63.221.136.0/21", + "63.221.170.0/24", + "72.57.238.0/24", + "209.8.152.0/23", + "2400:8800:f80f::/48", + "199.162.192.0/19", + "63.222.12.0/24", + "2400:8800:f805::/48", + "185.152.48.0/22", + "63.221.168.0/24", + "208.22.128.0/19", + "65.72.32.0/20", + "63.222.38.0/24", + "207.226.144.0/22", + "63.222.51.0/24", + "63.218.214.0/23", + "63.217.237.0/24", + "208.13.192.0/19", + "205.177.176.0/20", + "63.222.75.0/24", + "146.222.238.0/24", + "205.177.8.0/23", + "116.66.210.0/23", + "205.252.14.0/23", + "72.57.242.0/24", + "63.218.228.0/23", + "205.177.197.0/24", + "63.223.13.0/24", + "205.252.56.0/22", + "63.221.240.0/24", + "206.161.128.0/18", + "63.219.52.0/22", + "63.218.160.0/23", + "63.218.142.0/23", + "72.57.248.0/24", + "205.177.164.0/22", + "63.222.167.0/24", + "207.176.48.0/22", + "63.222.41.0/24", + "2400:8800:f829::/48", + "41.221.217.0/24", + "209.9.208.0/21", + "63.222.202.0/24", + "209.8.48.0/22", + "2400:8800:f81f::/48", + "63.222.209.0/24", + "209.8.112.0/21", + "63.218.218.0/23", + "63.217.48.0/22", + "82.108.224.0/19", + "63.220.13.0/24", + "209.8.152.0/21", + "41.221.208.0/20", + "63.218.80.0/23", + "63.222.65.0/24", + "63.218.4.0/23", + "63.223.206.0/24", + "63.219.32.0/24", + "209.8.144.0/22", + "196.251.160.0/19", + "207.226.136.0/21", + "72.57.241.0/24", + "82.109.16.0/20", + "205.252.10.0/24", + "205.252.130.0/23", + "63.216.170.0/24", + "208.20.96.0/19", + "63.217.71.0/24", + "205.177.24.0/22", + "2400:8800:f823::/48", + "72.57.253.0/24", + "206.161.232.0/24", + "205.252.137.0/24", + "209.9.2.0/23", + "205.177.208.0/21", + "63.221.80.0/21", + "63.216.144.0/22", + "63.218.222.0/23", + "63.222.161.0/24", + "63.217.254.0/24", + "63.222.50.0/24", + "63.223.143.0/24", + "63.223.31.0/24", + "63.222.106.0/24", + "2400:8800:4000::/35", + "207.226.114.0/24", + "209.9.80.0/22", + "63.216.240.0/24", + "209.9.8.0/21", + "63.217.72.0/22", + "154.194.34.0/24", + "2400:8800:f804::/48", + "63.222.216.0/24", + "63.218.68.0/22", + "2400:8800:fc0b::/48", + "63.217.60.0/22", + "41.79.248.0/22", + "207.176.115.0/24", + "63.222.52.0/24", + "2400:8800::/32", + "63.223.38.0/24", + "63.216.142.0/23", + "207.176.86.0/24", + "205.252.143.0/24", + "2400:8800:f806::/48", + "209.8.192.0/22", + "168.90.92.0/22", + "63.218.63.0/24", + "63.222.144.0/24", + "209.8.104.0/21", + "205.252.135.0/24", + "41.79.250.0/24", + "63.222.155.0/24", + "82.109.128.0/20", + "2400:8800:c000::/35", + "205.252.0.0/16", + "207.176.0.0/17", + "2400:8800:f821::/48", + "209.8.146.0/24", + "63.218.78.0/23", + "195.21.160.0/19", + "45.195.74.0/24", + "63.222.136.0/24", + "87.84.96.0/19", + "63.218.162.0/23", + "63.218.17.0/24", + "63.218.40.0/24", + "63.218.60.0/22", + "63.220.128.0/21", + "63.223.168.0/24", + "63.222.21.0/24", + "63.216.156.0/24", + "63.218.114.0/23", + "209.8.190.0/24", + "63.223.34.0/24", + "63.216.140.0/24", + "82.109.80.0/20", + "63.221.200.0/21", + "63.218.58.0/24", + "207.176.112.0/21", + "217.113.64.0/19", + "87.82.128.0/18", + "63.219.0.0/20", + "72.57.239.0/24", + "116.66.216.0/22", + "63.221.146.0/24", + "63.222.201.0/24", + "63.222.166.0/24", + "209.8.208.0/21", + "63.218.250.0/23", + "41.79.249.0/24", + "63.222.0.0/22", + "63.218.248.0/23", + "63.218.26.0/23", + "63.217.96.0/22", + "2400:8800:f828::/48", + "63.218.72.0/23", + "63.217.20.0/22", + "2400:8800:101::/48", + "199.13.128.0/19", + "63.218.236.0/23", + "63.221.244.0/24", + "63.217.70.0/24", + "63.223.224.0/24", + "146.222.240.0/24", + "63.216.168.0/21", + "2400:8800:fc03::/48", + "103.28.200.0/24", + "205.177.137.0/24", + "63.218.92.0/22", + "101.60.254.0/24", + "41.79.244.0/22", + "63.218.10.0/23", + "208.21.96.0/19", + "63.218.156.0/23", + "207.176.80.0/20", + "2400:8800:fc10::/48", + "43.230.86.0/23", + "63.218.194.0/23", + "63.217.87.0/24", + "2400:8800:f807::/48", + "208.21.64.0/19", + "207.226.236.0/22", + "63.222.145.0/24", + "63.223.144.0/24", + "205.252.216.0/21", + "63.222.184.0/24", + "206.161.0.0/16", + "2400:8800::/35", + "207.226.238.0/24", + "2400:8800:a000::/35", + "2400:8800:fc09::/48", + "63.218.44.0/22", + "207.176.30.0/24", + "2c0f:f3d0::/32", + "72.57.247.0/24", + "72.57.254.0/24", + "63.222.147.0/24", + "209.8.200.0/21", + "63.222.187.0/24", + "63.222.7.0/24", + "63.218.82.0/23", + "63.223.49.0/24", + "209.9.119.0/24", + "63.222.200.0/24", + "196.216.156.0/24", + "217.156.160.0/24", + "63.216.192.0/21", + "207.226.132.0/22", + "2400:8800:f827::/48", + "63.218.106.0/24", + "63.222.217.0/24", + "63.222.148.0/24", + "209.8.96.0/21", + "63.221.242.0/24", + "116.206.112.0/23", + "205.177.224.0/21", + "205.177.32.0/22", + "209.9.36.0/24", + "63.218.40.0/23", + "63.222.154.0/24", + "63.222.62.0/24", + "116.66.208.0/23", + "2c0f:f3c0::/32", + "2400:8800:fc07::/48", + "63.218.184.0/23", + "146.222.194.0/24", + "63.220.0.0/21", + "205.177.44.0/22", + "206.161.9.0/24", + "209.9.104.0/21", + "63.216.56.0/21", + "146.222.35.0/24", + "116.66.220.0/22", + "63.222.40.0/24", + "2400:8800:1000::/37", + "63.218.48.0/23", + "205.252.134.0/24", + "63.217.81.0/24", + "206.161.216.0/21", + "207.176.31.0/24", + "63.222.188.0/24", + "82.110.192.0/19", + "87.82.32.0/20", + "63.218.14.0/23", + "63.223.54.0/24", + "63.222.37.0/24", + "199.12.0.0/19", + "63.217.40.0/21", + "82.108.176.0/20", + "168.90.94.0/24", + "63.216.164.0/22", + "208.22.160.0/19", + "63.216.193.0/24", + "63.216.82.0/23", + "63.218.178.0/23", + "207.176.32.0/22", + "2400:8800:f811::/48", + "209.9.128.0/21", + "207.226.152.0/21", + "209.9.136.0/24", + "209.9.112.0/24", + "63.223.51.0/24", + "63.222.34.0/24", + "206.161.234.0/24", + "63.217.168.0/22", + "63.220.204.0/24", + "209.8.63.0/24", + "63.222.42.0/24", + "82.109.32.0/20", + "209.8.224.0/21", + "217.113.65.0/24", + "207.226.80.0/20", + "146.222.184.0/24", + "209.9.20.0/22", + "146.222.29.0/24", + "116.66.208.0/20", + "63.223.0.0/24", + "205.177.112.0/24", + "63.218.232.0/23", + "209.9.72.0/22", + "206.161.16.0/21", + "63.223.53.0/24", + "206.161.228.0/22", + "63.218.148.0/23", + "72.57.128.0/22", + "107.155.192.0/18", + "63.222.152.0/24", + "63.218.210.0/23", + "63.222.36.0/24", + "65.72.64.0/20", + "146.222.25.0/24", + "72.57.252.0/24", + "205.252.40.0/22", + "63.218.34.0/23", + "63.222.251.0/24", + "205.177.232.0/22", + "63.223.17.0/24", + "72.57.245.0/24", + "199.12.128.0/19", + "87.83.240.0/20", + "79.109.232.0/22", + "2400:8800:f80e::/48", + "87.85.192.0/19", + "63.223.24.0/24", + "63.218.164.0/23", + "209.9.216.0/21", + "205.252.114.0/24", + "63.217.248.0/22", + "63.217.120.0/22", + "146.222.26.0/24", + "63.222.186.0/24", + "207.226.254.0/23", + "63.218.252.0/23", + "209.8.0.0/15", + "63.222.248.0/24", + "63.223.9.0/24", + "63.218.150.0/23", + "205.177.88.0/21", + "63.218.12.0/23", + "63.216.0.0/13", + "209.9.224.0/19", + "63.217.88.0/21", + "205.177.198.0/24", + "63.222.191.0/24", + "205.177.196.0/22", + "185.77.60.0/22", + "205.177.216.0/21", + "63.222.68.0/24", + "63.221.154.0/24", + "63.218.244.0/24", + "63.218.234.0/23", + "63.222.190.0/24", + "195.21.192.0/18", + "82.110.64.0/19", + "209.9.40.0/21", + "217.156.163.0/24", + "205.252.80.0/21", + "205.177.232.0/24", + "205.177.233.0/24", + "63.222.58.0/24", + "82.110.0.0/19", + "63.223.20.0/24", + "63.218.66.0/24", + "63.218.144.0/23", + "63.223.211.0/24", + "63.218.188.0/23", + "209.9.139.0/24", + "63.222.47.0/24", + "209.9.138.0/24", + "63.221.246.0/24", + "208.20.64.0/19", + "63.218.136.0/24", + "2400:8800:6000::/35", + "206.161.224.0/22", + "2400:8800:fc0e::/48", + "63.222.162.0/24", + "209.9.36.0/22", + "82.108.16.0/20", + "63.222.70.0/24", + "2400:8800:8000::/35", + "63.222.49.0/24", + "2400:8800:e000::/35", + "207.226.224.0/21", + "2400:8800:fc08::/48", + "63.221.152.0/21", + "207.226.216.0/22", + "63.216.151.0/24", + "205.252.168.0/21", + "63.217.168.0/24", + "63.223.11.0/24", + "63.222.4.0/23", + "63.216.150.0/24", + "63.221.245.0/24", + "209.8.178.0/24", + "63.221.192.0/21", + "207.226.32.0/20", + "63.221.181.0/24", + "205.177.132.0/22", + "63.223.64.0/18", + "31.59.78.0/24", + "209.8.240.0/21", + "41.221.216.0/24", + "87.83.176.0/20", + "63.223.156.0/24", + "63.218.174.0/23", + "63.216.35.0/24", + "63.217.80.0/21", + "205.177.234.0/24", + "63.223.192.0/20", + "63.216.176.0/24", + "168.90.92.0/23", + "207.226.244.0/22", + "72.57.255.0/24", + "63.222.33.0/24", + "87.83.128.0/19", + "63.223.27.0/24", + "87.82.64.0/18", + "65.72.0.0/20", + "206.161.248.0/22", + "63.221.155.0/24", + "63.223.44.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 0 unexpected prefix(es), 563 missing" + }, + { + "id": "9b3fb90078818ec1", + "asn": "132372", + "ts": "2026-07-05T14:06:32.273Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c357e3bcbc850832", + "asn": "15290", + "ts": "2026-07-05T15:06:24.560Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "cac77c5e1106808c", + "asn": "24940", + "ts": "2026-07-05T15:36:23.311Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "3431d1a0d359d0bd", + "asn": "138699", + "ts": "2026-07-05T16:06:23.804Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "2e9f81c703b6b860", + "asn": "34702", + "ts": "2026-07-05T17:06:25.180Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b12c20e9410e39c4", + "asn": "22616", + "ts": "2026-07-05T17:06:25.789Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.120.0/23", + "137.31.101.0/24", + "137.31.124.0/23", + "137.31.126.0/23", + "137.31.122.0/23", + "137.31.114.0/23", + "155.95.86.0/24", + "137.31.128.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "140.232.190.0/24", + "2605:4300:e500::/40", + "205.220.12.0/23", + "165.225.99.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "e46c8d653aba1123", + "asn": "396986", + "ts": "2026-07-05T20:06:28.751Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "101.45.6.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "eb8bb14103ff5d06", + "asn": "132372", + "ts": "2026-07-05T20:06:33.341Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1bd6a971f7bce92c", + "asn": "3491", + "ts": "2026-07-05T20:36:24.513Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "43aa7879ee8067dc", + "asn": "15290", + "ts": "2026-07-05T21:36:24.410Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "e9b5a3ca2098c892", + "asn": "24940", + "ts": "2026-07-05T22:06:23.313Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "e058899a9597561a", + "asn": "138699", + "ts": "2026-07-05T22:06:24.102Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "d5ba1759c032b6c2", + "asn": "34702", + "ts": "2026-07-05T23:36:24.804Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d9578b7b8371e43c", + "asn": "22616", + "ts": "2026-07-05T23:36:25.740Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.120.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "165.225.99.0/24", + "137.31.126.0/23", + "137.31.124.0/23", + "137.31.101.0/24", + "137.31.122.0/23", + "140.232.189.0/24", + "155.95.86.0/24", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.114.0/23", + "205.220.14.0/23", + "205.220.12.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "df5c3a3d558c875c", + "asn": "396986", + "ts": "2026-07-06T02:36:23.600Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "101.45.6.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "86dbc6e9b3938199", + "asn": "132372", + "ts": "2026-07-06T02:36:24.760Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "46e1a87c522c9274", + "asn": "3491", + "ts": "2026-07-06T03:06:24.211Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "b708b4950a59dd70", + "asn": "15290", + "ts": "2026-07-06T03:36:24.610Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "541db90e5b8b6e23", + "asn": "24940", + "ts": "2026-07-06T04:36:36.655Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "2ae623324cfe5b52", + "asn": "138699", + "ts": "2026-07-06T04:36:36.989Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "d134c0c52e62ac2d", + "asn": "34702", + "ts": "2026-07-06T05:36:38.316Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "634a397466c97e81", + "asn": "22616", + "ts": "2026-07-06T05:36:39.386Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "155.95.86.0/24", + "205.220.14.0/23", + "137.31.114.0/23", + "137.31.101.0/24", + "140.232.190.0/24", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.122.0/23", + "140.232.189.0/24", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.12.0/23", + "137.31.126.0/23", + "137.31.120.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "3c94af64b74d96c8", + "asn": "396986", + "ts": "2026-07-06T08:36:37.002Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "50651ca73e33729b", + "asn": "132372", + "ts": "2026-07-06T08:36:38.322Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "a4f27e8444a5f4d5", + "asn": "3491", + "ts": "2026-07-06T09:06:37.022Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "e9eb583e25ff8143", + "asn": "15290", + "ts": "2026-07-06T09:36:37.785Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "46a0e9e5c5a0d68c", + "asn": "24940", + "ts": "2026-07-06T11:06:36.726Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "97e4e77fd06d7ec0", + "asn": "138699", + "ts": "2026-07-06T11:06:37.317Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ce02faab825ade34", + "asn": "34702", + "ts": "2026-07-06T11:36:39.621Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b063440a2d1b5859", + "asn": "22616", + "ts": "2026-07-06T11:36:42.742Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "137.31.120.0/23", + "205.220.14.0/23", + "137.31.124.0/23", + "140.232.190.0/24", + "137.31.101.0/24", + "205.220.12.0/23", + "137.31.119.0/24", + "155.95.86.0/24", + "165.225.99.0/24", + "137.31.122.0/23", + "2605:4300:e500::/40", + "140.232.189.0/24", + "137.31.114.0/23", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "d614308f82d73c2a", + "asn": "396986", + "ts": "2026-07-06T14:36:37.252Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "faa952f8d1ba5113", + "asn": "132372", + "ts": "2026-07-06T14:36:38.591Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1688bb2c11804609", + "asn": "3491", + "ts": "2026-07-06T15:06:37.580Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "9ba05d7f4f9121c6", + "asn": "15290", + "ts": "2026-07-06T15:36:38.376Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "e0c059db8bd774c5", + "asn": "24940", + "ts": "2026-07-06T17:36:36.671Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f04d3a932d809065", + "asn": "138699", + "ts": "2026-07-06T17:36:37.582Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "5188c4d725ad84d8", + "asn": "34702", + "ts": "2026-07-06T18:06:46.226Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "5ee19bc9e2c908eb", + "asn": "22616", + "ts": "2026-07-06T18:06:47.301Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "137.31.120.0/23", + "205.220.14.0/23", + "137.31.124.0/23", + "140.232.190.0/24", + "137.31.101.0/24", + "205.220.12.0/23", + "137.31.119.0/24", + "155.95.86.0/24", + "165.225.99.0/24", + "137.31.122.0/23", + "2605:4300:e500::/40", + "140.232.189.0/24", + "137.31.114.0/23", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "ba92d720cfeb7eca", + "asn": "396986", + "ts": "2026-07-06T20:36:37.282Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "08c4a32209b92e42", + "asn": "132372", + "ts": "2026-07-06T20:36:38.686Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "88c159208037bba2", + "asn": "3491", + "ts": "2026-07-06T21:36:37.975Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "129388c402b7cb44", + "asn": "15290", + "ts": "2026-07-06T22:06:37.975Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "63aead565b2ff0ee", + "asn": "24940", + "ts": "2026-07-06T23:36:36.683Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "23c5b4cc6d35addf", + "asn": "138699", + "ts": "2026-07-07T00:06:37.043Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "dc2735e999ff2d92", + "asn": "34702", + "ts": "2026-07-07T00:36:38.418Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "5c490c88f4be64fb", + "asn": "22616", + "ts": "2026-07-07T00:36:40.059Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.119.0/24", + "137.31.122.0/23", + "2605:4300:e500::/40", + "137.31.124.0/23", + "155.95.86.0/24", + "137.31.101.0/24", + "165.225.99.0/24", + "137.31.126.0/23", + "137.31.114.0/23", + "137.31.128.0/23", + "140.232.189.0/24", + "205.220.12.0/23", + "205.220.14.0/23", + "137.31.120.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "1ea566720a887fce", + "asn": "396986", + "ts": "2026-07-07T02:36:37.378Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "bd400e5e8e769af4", + "asn": "132372", + "ts": "2026-07-07T02:36:38.883Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "45c24191d55a282e", + "asn": "3491", + "ts": "2026-07-07T04:36:47.772Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "62efbeb2b260b723", + "asn": "15290", + "ts": "2026-07-07T04:36:48.104Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "0a482841d22eed63", + "asn": "24940", + "ts": "2026-07-07T05:36:42.308Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "8c32918981db999c", + "asn": "138699", + "ts": "2026-07-07T06:06:50.586Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "0fa4cf50d3bc92e4", + "asn": "57099", + "ts": "2026-07-07T06:07:06.588Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "185.168.144.0/22", + "146.255.104.0/21", + "85.95.32.0/19", + "91.214.228.0/22", + "185.47.216.0/22", + "185.113.0.0/22", + "151.249.64.0/20", + "5.133.172.0/22", + "164.138.80.0/21", + "209.35.128.0/20", + "185.56.40.0/22", + "185.44.248.0/22", + "185.16.224.0/22", + "46.231.8.0/21", + "91.229.222.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS57099: 0 unexpected prefix(es), 15 missing" + }, + { + "id": "fb390b6b1aa94491", + "asn": "34702", + "ts": "2026-07-07T06:36:45.648Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "49213f7945713249", + "asn": "22616", + "ts": "2026-07-07T06:36:46.814Z", + "severity": "CRITICAL", + "unexpected": [ + "155.95.86.0/24", + "137.31.126.0/23", + "137.31.101.0/24", + "137.31.114.0/23", + "140.232.190.0/24", + "2605:4300:e500::/40", + "137.31.120.0/23", + "137.31.124.0/23", + "137.31.122.0/23", + "205.220.12.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "140.232.189.0/24", + "137.31.128.0/23", + "137.31.119.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "1c3fd781abd86afb", + "asn": "396986", + "ts": "2026-07-07T08:41:50.065Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "42429e68b3023a2f", + "asn": "132372", + "ts": "2026-07-07T08:41:51.361Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "4ce93608eceae20a", + "asn": "3491", + "ts": "2026-07-07T10:41:50.695Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "812779939f758dac", + "asn": "15290", + "ts": "2026-07-07T10:41:51.027Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "f75c19fce0aa6a8f", + "asn": "24940", + "ts": "2026-07-07T11:41:49.797Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "04a4eeb756f79db1", + "asn": "138699", + "ts": "2026-07-07T12:11:50.029Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "be6ba4c578a7bc80", + "asn": "34702", + "ts": "2026-07-07T12:41:51.384Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "49bbbaa2846b4a78", + "asn": "22616", + "ts": "2026-07-07T12:41:52.737Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.114.0/23", + "137.31.128.0/23", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "137.31.124.0/23", + "205.220.14.0/23", + "155.95.86.0/24", + "137.31.120.0/23", + "165.225.99.0/24", + "137.31.122.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "a71cfd0bf013d14b", + "asn": "396986", + "ts": "2026-07-07T14:41:50.164Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "13b73e76a9b74ada", + "asn": "132372", + "ts": "2026-07-07T14:41:51.648Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "6dd49672252e6ebb", + "asn": "3491", + "ts": "2026-07-07T17:11:50.703Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "b4d91594fd7c18b3", + "asn": "15290", + "ts": "2026-07-07T17:11:51.035Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "02ee0e1d804f4d7d", + "asn": "24940", + "ts": "2026-07-07T18:11:49.806Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "995a3ba55658ba2d", + "asn": "138699", + "ts": "2026-07-07T18:11:52.151Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "161d427572f009a9", + "asn": "34702", + "ts": "2026-07-07T19:11:50.592Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3f4bbe5cc226017b", + "asn": "22616", + "ts": "2026-07-07T19:11:51.605Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.12.0/23", + "137.31.101.0/24", + "155.95.86.0/24", + "165.225.99.0/24", + "205.220.14.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "137.31.124.0/23", + "2605:4300:e500::/40", + "137.31.114.0/23", + "137.31.126.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "137.31.120.0/23", + "137.31.122.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "7d48f64d65c6555e", + "asn": "396986", + "ts": "2026-07-07T20:41:50.657Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "beaa40fff0109bdd", + "asn": "132372", + "ts": "2026-07-07T20:41:51.972Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "874f6bee508686ed", + "asn": "3491", + "ts": "2026-07-07T23:11:50.735Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "9a861217bbc0428a", + "asn": "15290", + "ts": "2026-07-07T23:11:51.059Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 31 missing" + }, + { + "id": "67741b5d8e6e0958", + "asn": "24940", + "ts": "2026-07-08T00:11:49.826Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d9c48264cc110048", + "asn": "138699", + "ts": "2026-07-08T00:41:50.130Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "43153c985bbb3f63", + "asn": "34702", + "ts": "2026-07-08T01:11:51.120Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "22adad183372a3d0", + "asn": "22616", + "ts": "2026-07-08T01:11:52.161Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.12.0/23", + "137.31.101.0/24", + "155.95.86.0/24", + "165.225.99.0/24", + "205.220.14.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "137.31.124.0/23", + "2605:4300:e500::/40", + "137.31.114.0/23", + "137.31.126.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "137.31.120.0/23", + "137.31.122.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "c3a65c6741abe7ad", + "asn": "396986", + "ts": "2026-07-08T03:11:50.109Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "c92baf692404a183", + "asn": "132372", + "ts": "2026-07-08T03:11:51.404Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "7cc5a2f8a3f25f71", + "asn": "3491", + "ts": "2026-07-08T05:41:50.740Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "24e60c8fb9ef0771", + "asn": "15290", + "ts": "2026-07-08T05:41:51.094Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "00b50870778967c6", + "asn": "24940", + "ts": "2026-07-08T06:41:49.830Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "193.105.82.0/24", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "13e71cde83ae9596", + "asn": "138699", + "ts": "2026-07-08T06:41:50.268Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1e2c1439a1a54bf2", + "asn": "34702", + "ts": "2026-07-08T07:11:51.155Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2842c26ed2214975", + "asn": "22616", + "ts": "2026-07-08T07:41:53.344Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "137.31.101.0/24", + "140.232.189.0/24", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.12.0/23", + "155.95.86.0/24", + "137.31.122.0/23", + "165.225.99.0/24", + "205.220.14.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "9745b630471b37c3", + "asn": "396986", + "ts": "2026-07-08T09:11:50.124Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "f623828aef22adb5", + "asn": "132372", + "ts": "2026-07-08T09:41:51.423Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "02148249d92e7afc", + "asn": "3491", + "ts": "2026-07-08T12:11:51.815Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "19544f6fb038fcf6", + "asn": "15290", + "ts": "2026-07-08T12:11:52.326Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "3654605099f57c82", + "asn": "24940", + "ts": "2026-07-08T13:11:49.802Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "ad89cc91c9a79eb8", + "asn": "138699", + "ts": "2026-07-08T13:11:50.559Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "4c97f567aeb6aa71", + "asn": "34702", + "ts": "2026-07-08T13:11:51.504Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "7809a1e71630eea9", + "asn": "22616", + "ts": "2026-07-08T14:11:52.208Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.188.0/24", + "137.31.126.0/23", + "2605:4300:e500::/40", + "137.31.128.0/23", + "205.220.12.0/23", + "137.31.120.0/23", + "137.31.119.0/24", + "155.95.86.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "8a102c2167431a97", + "asn": "396986", + "ts": "2026-07-08T15:11:50.156Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "2db57ce237d64761", + "asn": "132372", + "ts": "2026-07-08T15:41:51.522Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "4ba3590a828fc21a", + "asn": "3491", + "ts": "2026-07-08T18:41:50.716Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "09af38f29b2e2864", + "asn": "15290", + "ts": "2026-07-08T18:41:51.030Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "3eb61daaf938ffce", + "asn": "24940", + "ts": "2026-07-08T19:11:49.868Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "7393824f99532673", + "asn": "138699", + "ts": "2026-07-08T19:41:50.170Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1928cc543d113c1f", + "asn": "34702", + "ts": "2026-07-08T19:41:51.143Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "db7f39f3e646267c", + "asn": "22616", + "ts": "2026-07-08T20:11:52.484Z", + "severity": "CRITICAL", + "unexpected": [ + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.114.0/23", + "205.220.12.0/23", + "140.232.190.0/24", + "137.31.120.0/23", + "137.31.101.0/24", + "140.232.188.0/24", + "205.220.14.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "137.31.126.0/23", + "137.31.128.0/23", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "aa2f1fd594e4ddbd", + "asn": "396986", + "ts": "2026-07-08T21:11:50.170Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.45.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "5da5bc7c4644ef13", + "asn": "199121", + "ts": "2026-07-08T21:41:57.684Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "4896993c08b80977", + "asn": "132372", + "ts": "2026-07-08T21:42:02.315Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f3e002a09d60b229", + "asn": "3491", + "ts": "2026-07-09T00:41:50.990Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "436486e61447ccd4", + "asn": "15290", + "ts": "2026-07-09T00:41:51.381Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "55a138dfc2347d99", + "asn": "24940", + "ts": "2026-07-09T01:41:49.803Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "cdc31a5bdc9f9c5a", + "asn": "138699", + "ts": "2026-07-09T02:11:50.181Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ae9c6f3783acffd8", + "asn": "34702", + "ts": "2026-07-09T02:11:51.150Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "447ec3bccaf78fa1", + "asn": "22616", + "ts": "2026-07-09T02:41:52.439Z", + "severity": "CRITICAL", + "unexpected": [ + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.114.0/23", + "205.220.12.0/23", + "140.232.190.0/24", + "137.31.120.0/23", + "137.31.101.0/24", + "140.232.188.0/24", + "205.220.14.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "137.31.126.0/23", + "137.31.128.0/23", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "925e85d68236a837", + "asn": "396986", + "ts": "2026-07-09T03:41:50.115Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.45.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "cd37bdc29ff69d86", + "asn": "132372", + "ts": "2026-07-09T04:12:01.263Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "dad5c4fbb69aa499", + "asn": "3491", + "ts": "2026-07-09T06:41:51.149Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "a2b99c05c456d59c", + "asn": "15290", + "ts": "2026-07-09T06:41:51.600Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "02452466c09cac6d", + "asn": "24940", + "ts": "2026-07-09T07:41:49.825Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "88eeeb650cda9d87", + "asn": "138699", + "ts": "2026-07-09T08:11:50.187Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "5d208cf0e1b54549", + "asn": "34702", + "ts": "2026-07-09T08:11:51.292Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "bac15a51fecb7f29", + "asn": "22616", + "ts": "2026-07-09T09:11:52.398Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.122.0/23", + "140.232.188.0/24", + "205.220.12.0/23", + "137.31.114.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "2605:4300:e500::/40", + "155.95.86.0/24", + "137.31.126.0/23", + "137.31.120.0/23", + "205.220.14.0/23", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.101.0/24", + "137.31.128.0/23", + "140.232.190.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "144ee87188381afa", + "asn": "396986", + "ts": "2026-07-09T09:41:50.354Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.45.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "76fa0ef4e900bcf3", + "asn": "132372", + "ts": "2026-07-09T10:41:51.466Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1030c0a5babe76a3", + "asn": "3491", + "ts": "2026-07-09T13:11:50.722Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "4045550884e0d61f", + "asn": "15290", + "ts": "2026-07-09T13:11:51.095Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "7bc0ca9ea0cc446d", + "asn": "24940", + "ts": "2026-07-09T14:11:49.843Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "1b757779765cad32", + "asn": "138699", + "ts": "2026-07-09T14:11:50.205Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "8d3cf257cd32674f", + "asn": "34702", + "ts": "2026-07-09T14:41:51.260Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "fbbf8c0f7ca771db", + "asn": "22616", + "ts": "2026-07-09T15:41:52.398Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.124.0/23", + "155.95.86.0/24", + "205.220.12.0/23", + "137.31.119.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "137.31.101.0/24", + "137.31.126.0/23", + "2605:4300:e500::/40", + "140.232.190.0/24", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.122.0/23", + "137.31.114.0/23", + "140.232.189.0/24", + "137.31.120.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "d87dd71d2df9deb5", + "asn": "396986", + "ts": "2026-07-09T16:11:50.608Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.199.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.15.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.45.0/24", + "101.45.202.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "6b7d0af1287b3c2a", + "asn": "132372", + "ts": "2026-07-09T16:41:51.469Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "5d24eaa839529baf", + "asn": "3491", + "ts": "2026-07-09T19:11:51.205Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "d67939bf5f73f2f7", + "asn": "15290", + "ts": "2026-07-09T19:11:51.539Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "c9ee5b6a23d7e5b5", + "asn": "138699", + "ts": "2026-07-09T20:11:50.654Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "9ad11efd82be9c82", + "asn": "24940", + "ts": "2026-07-09T20:41:49.825Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f65ea38eaf344d3a", + "asn": "34702", + "ts": "2026-07-09T21:11:51.225Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f28930ec91047ead", + "asn": "22616", + "ts": "2026-07-09T21:41:52.598Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.120.0/23", + "140.232.190.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.119.0/24", + "140.232.189.0/24", + "137.31.126.0/23", + "205.220.12.0/23", + "137.31.122.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.101.0/24", + "140.232.188.0/24", + "205.220.14.0/23", + "137.31.128.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "f364a1e634e474b7", + "asn": "396986", + "ts": "2026-07-09T22:41:50.169Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "71.18.45.0/24", + "101.45.199.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "ec10601b1e43ec0a", + "asn": "132372", + "ts": "2026-07-09T22:41:51.489Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "cf25a9024b30bf30", + "asn": "3491", + "ts": "2026-07-10T01:41:51.012Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "f00227dc1d580676", + "asn": "15290", + "ts": "2026-07-10T01:41:51.338Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "cdfed84e824a215d", + "asn": "24940", + "ts": "2026-07-10T02:41:49.828Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "0885655334ab305c", + "asn": "138699", + "ts": "2026-07-10T02:41:50.162Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "11fd04ad54d1620d", + "asn": "34702", + "ts": "2026-07-10T03:11:51.581Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "bd5990278e24160b", + "asn": "22616", + "ts": "2026-07-10T03:41:53.607Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "155.95.86.0/24", + "137.31.126.0/23", + "137.31.122.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "2605:4300:e500::/40", + "137.31.124.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "205.220.12.0/23", + "140.232.189.0/24", + "137.31.114.0/23", + "137.31.120.0/23", + "137.31.101.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "0544d2de8c3a2916", + "asn": "396986", + "ts": "2026-07-10T05:11:50.161Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "71.18.71.0/24", + "101.45.15.0/24", + "71.18.44.0/24", + "71.18.65.0/24", + "71.18.45.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.202.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "85cad3d6552a7a35", + "asn": "132372", + "ts": "2026-07-10T05:11:51.427Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "4e16ab63793fec6a", + "asn": "3491", + "ts": "2026-07-10T08:11:50.683Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "63148bf4a8f296fa", + "asn": "15290", + "ts": "2026-07-10T08:11:51.019Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "6ad19c5f3d3af761", + "asn": "24940", + "ts": "2026-07-10T08:41:49.847Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "fde7971f4007fe76", + "asn": "138699", + "ts": "2026-07-10T08:41:50.173Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c07a2ba10d9ff696", + "asn": "34702", + "ts": "2026-07-10T09:41:51.282Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "98bd22d807e0c1a4", + "asn": "22616", + "ts": "2026-07-10T09:41:55.375Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "155.95.86.0/24", + "137.31.126.0/23", + "137.31.122.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "2605:4300:e500::/40", + "137.31.124.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "205.220.12.0/23", + "140.232.189.0/24", + "137.31.114.0/23", + "137.31.120.0/23", + "137.31.101.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "1b97b0670c4c3fd3", + "asn": "132372", + "ts": "2026-07-10T11:11:51.440Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "cdc2518f636fd4d4", + "asn": "396986", + "ts": "2026-07-10T11:41:50.298Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.44.0/24", + "71.18.66.0/24", + "71.18.45.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "509a4ef6996f3b3b", + "asn": "3491", + "ts": "2026-07-10T14:11:51.323Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "15eff556db418ba9", + "asn": "15290", + "ts": "2026-07-10T14:11:51.672Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "40f23da8811d2e8e", + "asn": "24940", + "ts": "2026-07-10T15:11:49.839Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "11ec1dee9fb44793", + "asn": "138699", + "ts": "2026-07-10T15:11:50.180Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "bda571cbda55d511", + "asn": "34702", + "ts": "2026-07-10T15:41:54.022Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2c960a92ea7db104", + "asn": "22616", + "ts": "2026-07-10T16:11:52.354Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.114.0/23", + "137.31.126.0/23", + "155.95.86.0/24", + "140.232.188.0/24", + "137.31.122.0/23", + "140.232.189.0/24", + "137.31.101.0/24", + "137.31.124.0/23", + "140.232.190.0/24", + "137.31.120.0/23", + "165.225.99.0/24", + "205.220.14.0/23", + "205.220.12.0/23", + "137.31.128.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "2d243242a045dab6", + "asn": "132372", + "ts": "2026-07-10T17:11:51.979Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "3567a90ad4cb9160", + "asn": "396986", + "ts": "2026-07-10T18:11:50.178Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.44.0/24", + "71.18.66.0/24", + "71.18.45.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "7aa0db8fcdca6bff", + "asn": "3491", + "ts": "2026-07-10T20:41:50.661Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "25db6afd6318d622", + "asn": "15290", + "ts": "2026-07-10T20:41:50.993Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "17ccd62c604b8661", + "asn": "24940", + "ts": "2026-07-10T21:11:49.910Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "7991624957914ae6", + "asn": "138699", + "ts": "2026-07-10T21:11:50.254Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "d8d224cae74c2301", + "asn": "34702", + "ts": "2026-07-10T22:11:51.154Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3311b6e4f977e2fa", + "asn": "22616", + "ts": "2026-07-10T22:41:52.391Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.188.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "165.225.99.0/24", + "137.31.119.0/24", + "205.220.12.0/23", + "137.31.128.0/23", + "205.220.14.0/23", + "137.31.101.0/24", + "137.31.124.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.126.0/23", + "137.31.120.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "3d198de693e2eedb", + "asn": "199121", + "ts": "2026-07-10T23:11:57.714Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "76ca5250c8b05705", + "asn": "132372", + "ts": "2026-07-10T23:11:59.253Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "22117557a13acc3f", + "asn": "396986", + "ts": "2026-07-11T00:41:50.119Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.45.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "101.45.15.0/24", + "71.18.44.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "16c0e133b70e40b9", + "asn": "3491", + "ts": "2026-07-11T02:41:52.200Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "624bac0481241f09", + "asn": "15290", + "ts": "2026-07-11T02:41:52.522Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "e04745df78e66991", + "asn": "24940", + "ts": "2026-07-11T03:41:49.850Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "deb49de690a19577", + "asn": "138699", + "ts": "2026-07-11T03:41:50.178Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ccef87b520da960e", + "asn": "34702", + "ts": "2026-07-11T04:11:51.227Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "444cf239ec516a7e", + "asn": "22616", + "ts": "2026-07-11T04:42:00.378Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "155.95.86.0/24", + "140.232.188.0/24", + "137.31.120.0/23", + "165.225.99.0/24", + "137.31.126.0/23", + "205.220.12.0/23", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.124.0/23", + "140.232.189.0/24", + "140.232.190.0/24", + "205.220.14.0/23", + "137.31.122.0/23", + "137.31.114.0/23", + "137.31.101.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "0dca9d690c2db171", + "asn": "132372", + "ts": "2026-07-11T05:41:52.759Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0ca222b437f9e14d", + "asn": "396986", + "ts": "2026-07-11T06:41:50.173Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.15.0/24", + "71.18.45.0/24", + "101.45.202.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "71.18.44.0/24", + "101.45.14.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "658afc10bffb76d5", + "asn": "199121", + "ts": "2026-07-11T09:11:57.714Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "f060bc043278c1a2", + "asn": "3491", + "ts": "2026-07-11T09:11:58.644Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "c78cd939ab9cf421", + "asn": "15290", + "ts": "2026-07-11T09:11:58.947Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "90d4c4ac62af91d2", + "asn": "24940", + "ts": "2026-07-11T09:41:49.868Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d3ebdeceb9917a27", + "asn": "138699", + "ts": "2026-07-11T09:41:50.217Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "e28d01e6f66a38bd", + "asn": "34702", + "ts": "2026-07-11T10:11:51.335Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "afa3d2959f2e99a9", + "asn": "22616", + "ts": "2026-07-11T11:11:54.508Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "205.220.12.0/23", + "137.31.124.0/23", + "137.31.120.0/23", + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "2605:4300:e500::/40", + "137.31.114.0/23", + "137.31.128.0/23", + "155.95.86.0/24", + "137.31.119.0/24", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "205.220.14.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "9528aa42e6c9d315", + "asn": "132372", + "ts": "2026-07-11T12:11:53.207Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d108b1393f88c297", + "asn": "396986", + "ts": "2026-07-11T12:41:50.237Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.45.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "5e95ac309ca64ea1", + "asn": "138699", + "ts": "2026-07-11T15:41:50.229Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a90c02a1f05e007d", + "asn": "3491", + "ts": "2026-07-11T15:41:50.885Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "64ee177262354f69", + "asn": "15290", + "ts": "2026-07-11T15:41:51.210Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "9175ee58efcc4bbd", + "asn": "24940", + "ts": "2026-07-11T16:11:49.840Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "8a077341d9c97702", + "asn": "34702", + "ts": "2026-07-11T16:41:51.165Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "bbd103af06b48e78", + "asn": "22616", + "ts": "2026-07-11T17:41:52.318Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "205.220.12.0/23", + "137.31.124.0/23", + "137.31.120.0/23", + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "2605:4300:e500::/40", + "137.31.114.0/23", + "137.31.128.0/23", + "155.95.86.0/24", + "137.31.119.0/24", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "205.220.14.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "97796effa73de47d", + "asn": "396986", + "ts": "2026-07-11T18:41:50.408Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.45.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "7d4860747edd9541", + "asn": "132372", + "ts": "2026-07-11T18:41:52.912Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d1bd4f2ecd0fbb0d", + "asn": "138699", + "ts": "2026-07-11T21:41:50.249Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "061cb61c5a46ffbd", + "asn": "24940", + "ts": "2026-07-11T22:11:50.081Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d91120c0c5a76ebf", + "asn": "3491", + "ts": "2026-07-11T22:11:51.062Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "2839b628578df743", + "asn": "15290", + "ts": "2026-07-11T22:11:51.395Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "42979c7796a9a434", + "asn": "34702", + "ts": "2026-07-11T22:41:51.211Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "4539b983164e4a7b", + "asn": "22616", + "ts": "2026-07-11T23:41:52.343Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.124.0/23", + "137.31.114.0/23", + "137.31.128.0/23", + "137.31.120.0/23", + "140.232.189.0/24", + "140.232.188.0/24", + "137.31.126.0/23", + "155.95.86.0/24", + "165.225.99.0/24", + "137.31.122.0/23", + "205.220.12.0/23", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.101.0/24", + "205.220.14.0/23", + "140.232.190.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "2f9c2aa9236b87d3", + "asn": "396986", + "ts": "2026-07-12T01:11:50.218Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "101.45.202.0/24", + "71.18.45.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.15.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "71.18.44.0/24", + "71.18.67.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "32a719ddc2d2d1ee", + "asn": "132372", + "ts": "2026-07-12T01:11:51.649Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "aaf143a5b4c28b4e", + "asn": "138699", + "ts": "2026-07-12T04:11:50.244Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ec45bebdb19186cb", + "asn": "24940", + "ts": "2026-07-12T04:41:49.860Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "35f86d1385ec64e9", + "asn": "3491", + "ts": "2026-07-12T04:41:50.775Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "29d084b9c4bdac0b", + "asn": "15290", + "ts": "2026-07-12T04:41:51.085Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "0cd86cde4e190581", + "asn": "34702", + "ts": "2026-07-12T05:11:51.194Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "7c36fdeecd7a0ab7", + "asn": "22616", + "ts": "2026-07-12T05:41:52.833Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.120.0/23", + "137.31.128.0/23", + "205.220.12.0/23", + "137.31.114.0/23", + "137.31.126.0/23", + "155.95.86.0/24", + "137.31.101.0/24", + "140.232.188.0/24", + "205.220.14.0/23", + "140.232.189.0/24", + "137.31.122.0/23", + "165.225.99.0/24", + "2605:4300:e500::/40", + "140.232.190.0/24", + "137.31.119.0/24", + "137.31.124.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "1bc5b18120ec431a", + "asn": "396986", + "ts": "2026-07-12T07:41:50.157Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.44.0/24", + "101.45.15.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.45.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "101.45.202.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "05b7a153d4aaa526", + "asn": "132372", + "ts": "2026-07-12T07:41:51.396Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "a71efac845cb792e", + "asn": "138699", + "ts": "2026-07-12T10:11:50.523Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "de9b65085d3e0b3c", + "asn": "24940", + "ts": "2026-07-12T10:41:49.881Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c8ef2ef675fd1f47", + "asn": "3491", + "ts": "2026-07-12T11:11:50.690Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "b11034f2486be422", + "asn": "15290", + "ts": "2026-07-12T11:11:51.036Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "9862249e677be67d", + "asn": "34702", + "ts": "2026-07-12T11:41:51.083Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "43afafca776ce5af", + "asn": "22616", + "ts": "2026-07-12T11:41:53.056Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.124.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "137.31.101.0/24", + "155.95.86.0/24", + "137.31.120.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.12.0/23", + "165.225.99.0/24", + "140.232.188.0/24", + "137.31.126.0/23", + "205.220.14.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "440a045d8d43205e", + "asn": "396986", + "ts": "2026-07-12T13:41:50.175Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.202.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "71.18.45.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "8965a2125ec9f930", + "asn": "132372", + "ts": "2026-07-12T13:41:51.437Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f93f36e691c71a98", + "asn": "138699", + "ts": "2026-07-12T16:41:50.163Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "8459bf06205c4b82", + "asn": "24940", + "ts": "2026-07-12T17:11:49.862Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "9135513075aaa40a", + "asn": "3491", + "ts": "2026-07-12T17:11:51.256Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "0bff3c826a5f2245", + "asn": "15290", + "ts": "2026-07-12T17:11:51.559Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "377ce90aa930bc73", + "asn": "34702", + "ts": "2026-07-12T17:41:51.182Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "929f21b925a62a0c", + "asn": "22616", + "ts": "2026-07-12T18:11:52.322Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.124.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "137.31.101.0/24", + "155.95.86.0/24", + "137.31.120.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.12.0/23", + "165.225.99.0/24", + "140.232.188.0/24", + "137.31.126.0/23", + "205.220.14.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "c3f6d994bfd7dc87", + "asn": "396986", + "ts": "2026-07-12T19:41:50.202Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.45.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "af13c93dfbffdfac", + "asn": "132372", + "ts": "2026-07-12T20:11:51.949Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "40c35364fb77dd6a", + "asn": "138699", + "ts": "2026-07-12T22:41:50.223Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "73fa01fad55cb1fc", + "asn": "24940", + "ts": "2026-07-12T23:11:49.872Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "ed750369eca5f13a", + "asn": "3491", + "ts": "2026-07-12T23:11:58.218Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "72.57.243.0/24", + "41.79.245.0/24", + "63.218.0.0/22", + "205.252.8.0/22", + "41.221.208.0/24", + "63.223.48.0/24", + "63.222.250.0/24", + "63.222.54.0/24", + "217.113.92.0/24", + "208.13.224.0/19", + "63.217.112.0/21", + "63.218.254.0/23", + "205.252.192.0/24", + "205.252.232.0/21", + "207.226.120.0/21", + "205.177.116.0/24", + "63.217.24.0/23", + "146.222.27.0/24", + "63.218.18.0/23", + "2400:8800:f80d::/48", + "207.176.117.0/24", + "2400:8800:1::/48", + "205.177.17.0/24", + "63.222.146.0/24", + "63.218.230.0/23", + "63.216.152.0/22", + "103.17.28.0/22", + "63.222.158.0/24", + "63.222.210.0/24", + "217.113.88.0/24", + "205.177.52.0/22", + "2400:8800:f810::/48", + "72.57.134.0/24", + "63.223.7.0/24", + "87.82.0.0/19", + "63.218.52.0/22", + "45.195.111.0/24", + "63.222.105.0/24", + "2400:8800:2000::/35", + "207.226.252.0/23", + "63.221.171.0/24", + "146.222.28.0/24", + "63.222.185.0/24", + "63.218.56.0/23", + "209.8.196.0/22", + "63.222.64.0/24", + "63.222.156.0/24", + "63.217.208.0/22", + "205.177.10.0/24", + "63.222.189.0/24", + "205.177.56.0/22", + "206.161.232.0/22", + "199.13.0.0/19", + "2400:8800:fc05::/48", + "63.222.16.0/21", + "2400:8800:f80a::/48", + "63.222.163.0/24", + "2400:8800:102::/48", + "199.12.96.0/19", + "63.218.107.0/24", + "63.217.66.0/24", + "217.113.86.0/24", + "63.217.103.0/24", + "63.218.112.0/23", + "2400:8800:fc0f::/48", + "209.8.116.0/24", + "63.218.240.0/23", + "2400:8800:4201::/48", + "205.177.0.0/16", + "63.218.246.0/23", + "209.9.24.0/22", + "63.221.128.0/21", + "2400:8800:f822::/48", + "217.156.160.0/21", + "63.218.213.0/24", + "82.109.112.0/20", + "63.218.36.0/22", + "63.218.100.0/23", + "63.218.76.0/23", + "146.222.239.0/24", + "209.9.48.0/21", + "41.221.216.0/22", + "63.222.93.0/24", + "2400:8800:1001::/48", + "205.252.108.0/22", + "146.222.187.0/24", + "63.216.149.0/24", + "205.252.136.0/24", + "63.222.160.0/24", + "63.223.14.0/24", + "63.222.45.0/24", + "63.218.122.0/23", + "63.216.48.0/21", + "205.252.16.0/22", + "206.161.115.0/24", + "63.218.22.0/23", + "203.170.52.0/22", + "41.79.248.0/24", + "116.66.212.0/22", + "63.222.35.0/24", + "209.9.137.0/24", + "207.226.60.0/24", + "72.57.240.0/24", + "63.222.150.0/24", + "82.110.160.0/19", + "72.57.250.0/24", + "206.161.88.0/24", + "63.223.128.0/24", + "72.57.244.0/24", + "63.218.146.0/23", + "209.8.3.0/24", + "149.134.175.0/24", + "209.9.48.0/24", + "146.222.18.0/24", + "72.57.132.0/24", + "72.57.249.0/24", + "63.223.19.0/24", + "63.218.166.0/23", + "63.220.64.0/18", + "63.218.172.0/23", + "63.223.152.0/24", + "63.223.25.0/24", + "63.223.1.0/24", + "63.223.16.0/24", + "209.8.8.0/21", + "63.223.22.0/24", + "63.221.169.0/24", + "205.177.84.0/22", + "72.57.246.0/24", + "2606:9dc0:fc00::/48", + "63.216.242.0/24", + "63.222.153.0/24", + "63.218.204.0/23", + "146.222.118.0/24", + "63.218.43.0/24", + "207.176.8.0/21", + "168.151.28.0/24", + "209.9.82.0/23", + "63.218.8.0/24", + "212.212.128.0/17", + "206.161.112.0/23", + "63.222.61.0/24", + "63.222.16.0/24", + "209.8.176.0/21", + "63.218.192.0/23", + "207.226.0.0/16", + "209.9.112.0/21", + "63.218.6.0/23", + "63.219.19.0/24", + "146.222.48.0/24", + "63.217.16.0/23", + "63.217.59.0/24", + "196.50.128.0/18", + "63.222.104.0/24", + "63.219.16.0/22", + "63.218.124.0/23", + "63.223.6.0/24", + "63.216.14.0/24", + "63.218.170.0/23", + "146.222.46.0/24", + "72.57.251.0/24", + "63.221.136.0/21", + "63.221.170.0/24", + "72.57.238.0/24", + "209.8.152.0/23", + "2400:8800:f80f::/48", + "199.162.192.0/19", + "63.222.12.0/24", + "2400:8800:f805::/48", + "185.152.48.0/22", + "63.221.168.0/24", + "208.22.128.0/19", + "65.72.32.0/20", + "63.222.38.0/24", + "207.226.144.0/22", + "63.222.51.0/24", + "63.218.214.0/23", + "63.217.237.0/24", + "208.13.192.0/19", + "205.177.176.0/20", + "63.222.75.0/24", + "146.222.238.0/24", + "205.177.8.0/23", + "116.66.210.0/23", + "205.252.14.0/23", + "72.57.242.0/24", + "63.218.228.0/23", + "205.177.197.0/24", + "63.223.13.0/24", + "205.252.56.0/22", + "63.221.240.0/24", + "206.161.128.0/18", + "63.219.52.0/22", + "63.218.160.0/23", + "63.218.142.0/23", + "72.57.248.0/24", + "205.177.164.0/22", + "63.222.167.0/24", + "207.176.48.0/22", + "63.222.41.0/24", + "2400:8800:f829::/48", + "41.221.217.0/24", + "209.9.208.0/21", + "63.222.202.0/24", + "209.8.48.0/22", + "2400:8800:f81f::/48", + "63.222.209.0/24", + "209.8.112.0/21", + "63.218.218.0/23", + "63.217.48.0/22", + "82.108.224.0/19", + "63.220.13.0/24", + "209.8.152.0/21", + "41.221.208.0/20", + "63.218.80.0/23", + "63.222.65.0/24", + "63.218.4.0/23", + "63.223.206.0/24", + "63.219.32.0/24", + "209.8.144.0/22", + "196.251.160.0/19", + "207.226.136.0/21", + "72.57.241.0/24", + "82.109.16.0/20", + "205.252.10.0/24", + "205.252.130.0/23", + "63.216.170.0/24", + "208.20.96.0/19", + "63.217.71.0/24", + "205.177.24.0/22", + "2400:8800:f823::/48", + "72.57.253.0/24", + "206.161.232.0/24", + "205.252.137.0/24", + "209.9.2.0/23", + "205.177.208.0/21", + "63.221.80.0/21", + "63.216.144.0/22", + "63.218.222.0/23", + "63.222.161.0/24", + "63.217.254.0/24", + "63.222.50.0/24", + "63.223.143.0/24", + "63.223.31.0/24", + "63.222.106.0/24", + "2400:8800:4000::/35", + "207.226.114.0/24", + "209.9.80.0/22", + "63.216.240.0/24", + "209.9.8.0/21", + "63.217.72.0/22", + "154.194.34.0/24", + "2400:8800:f804::/48", + "63.222.216.0/24", + "63.218.68.0/22", + "2400:8800:fc0b::/48", + "63.217.60.0/22", + "41.79.248.0/22", + "207.176.115.0/24", + "63.222.52.0/24", + "2400:8800::/32", + "63.223.38.0/24", + "63.216.142.0/23", + "207.176.86.0/24", + "205.252.143.0/24", + "2400:8800:f806::/48", + "209.8.192.0/22", + "168.90.92.0/22", + "63.218.63.0/24", + "63.222.144.0/24", + "209.8.104.0/21", + "205.252.135.0/24", + "41.79.250.0/24", + "63.222.155.0/24", + "82.109.128.0/20", + "2400:8800:c000::/35", + "205.252.0.0/16", + "207.176.0.0/17", + "2400:8800:f821::/48", + "209.8.146.0/24", + "63.218.78.0/23", + "195.21.160.0/19", + "45.195.74.0/24", + "63.222.136.0/24", + "87.84.96.0/19", + "63.218.162.0/23", + "63.218.17.0/24", + "63.218.40.0/24", + "63.218.60.0/22", + "63.220.128.0/21", + "63.223.168.0/24", + "63.222.21.0/24", + "63.216.156.0/24", + "63.218.114.0/23", + "209.8.190.0/24", + "63.223.34.0/24", + "63.216.140.0/24", + "82.109.80.0/20", + "63.221.200.0/21", + "63.218.58.0/24", + "207.176.112.0/21", + "217.113.64.0/19", + "87.82.128.0/18", + "63.219.0.0/20", + "72.57.239.0/24", + "116.66.216.0/22", + "63.221.146.0/24", + "63.222.201.0/24", + "63.222.166.0/24", + "209.8.208.0/21", + "63.218.250.0/23", + "41.79.249.0/24", + "63.222.0.0/22", + "63.218.248.0/23", + "63.218.26.0/23", + "63.217.96.0/22", + "2400:8800:f828::/48", + "63.218.72.0/23", + "63.217.20.0/22", + "2400:8800:101::/48", + "199.13.128.0/19", + "63.218.236.0/23", + "63.221.244.0/24", + "63.217.70.0/24", + "63.223.224.0/24", + "146.222.240.0/24", + "63.216.168.0/21", + "2400:8800:fc03::/48", + "103.28.200.0/24", + "205.177.137.0/24", + "63.218.92.0/22", + "101.60.254.0/24", + "41.79.244.0/22", + "63.218.10.0/23", + "208.21.96.0/19", + "63.218.156.0/23", + "207.176.80.0/20", + "2400:8800:fc10::/48", + "43.230.86.0/23", + "63.218.194.0/23", + "63.217.87.0/24", + "2400:8800:f807::/48", + "208.21.64.0/19", + "207.226.236.0/22", + "63.222.145.0/24", + "63.223.144.0/24", + "205.252.216.0/21", + "63.222.184.0/24", + "206.161.0.0/16", + "2400:8800::/35", + "207.226.238.0/24", + "2400:8800:a000::/35", + "2400:8800:fc09::/48", + "63.218.44.0/22", + "207.176.30.0/24", + "2c0f:f3d0::/32", + "72.57.247.0/24", + "72.57.254.0/24", + "63.222.147.0/24", + "209.8.200.0/21", + "63.222.187.0/24", + "63.222.7.0/24", + "63.218.82.0/23", + "63.223.49.0/24", + "209.9.119.0/24", + "63.222.200.0/24", + "196.216.156.0/24", + "217.156.160.0/24", + "63.216.192.0/21", + "207.226.132.0/22", + "2400:8800:f827::/48", + "63.218.106.0/24", + "63.222.217.0/24", + "63.222.148.0/24", + "209.8.96.0/21", + "63.221.242.0/24", + "116.206.112.0/23", + "205.177.224.0/21", + "205.177.32.0/22", + "209.9.36.0/24", + "63.218.40.0/23", + "63.222.154.0/24", + "63.222.62.0/24", + "116.66.208.0/23", + "2c0f:f3c0::/32", + "2400:8800:fc07::/48", + "63.218.184.0/23", + "146.222.194.0/24", + "63.220.0.0/21", + "205.177.44.0/22", + "206.161.9.0/24", + "209.9.104.0/21", + "63.216.56.0/21", + "146.222.35.0/24", + "116.66.220.0/22", + "63.222.40.0/24", + "2400:8800:1000::/37", + "63.218.48.0/23", + "205.252.134.0/24", + "63.217.81.0/24", + "206.161.216.0/21", + "207.176.31.0/24", + "63.222.188.0/24", + "82.110.192.0/19", + "87.82.32.0/20", + "63.218.14.0/23", + "63.223.54.0/24", + "63.222.37.0/24", + "199.12.0.0/19", + "63.217.40.0/21", + "82.108.176.0/20", + "168.90.94.0/24", + "63.216.164.0/22", + "208.22.160.0/19", + "63.216.193.0/24", + "63.216.82.0/23", + "63.218.178.0/23", + "207.176.32.0/22", + "2400:8800:f811::/48", + "209.9.128.0/21", + "207.226.152.0/21", + "209.9.136.0/24", + "209.9.112.0/24", + "63.223.51.0/24", + "63.222.34.0/24", + "206.161.234.0/24", + "63.217.168.0/22", + "63.220.204.0/24", + "209.8.63.0/24", + "63.222.42.0/24", + "82.109.32.0/20", + "209.8.224.0/21", + "217.113.65.0/24", + "207.226.80.0/20", + "146.222.184.0/24", + "209.9.20.0/22", + "146.222.29.0/24", + "116.66.208.0/20", + "63.223.0.0/24", + "205.177.112.0/24", + "63.218.232.0/23", + "209.9.72.0/22", + "206.161.16.0/21", + "63.223.53.0/24", + "206.161.228.0/22", + "63.218.148.0/23", + "72.57.128.0/22", + "107.155.192.0/18", + "63.222.152.0/24", + "63.218.210.0/23", + "63.222.36.0/24", + "65.72.64.0/20", + "146.222.25.0/24", + "72.57.252.0/24", + "205.252.40.0/22", + "63.218.34.0/23", + "63.222.251.0/24", + "205.177.232.0/22", + "63.223.17.0/24", + "72.57.245.0/24", + "199.12.128.0/19", + "87.83.240.0/20", + "79.109.232.0/22", + "2400:8800:f80e::/48", + "87.85.192.0/19", + "63.223.24.0/24", + "63.218.164.0/23", + "209.9.216.0/21", + "205.252.114.0/24", + "63.217.248.0/22", + "63.217.120.0/22", + "146.222.26.0/24", + "63.222.186.0/24", + "207.226.254.0/23", + "63.218.252.0/23", + "209.8.0.0/15", + "63.222.248.0/24", + "63.223.9.0/24", + "63.218.150.0/23", + "205.177.88.0/21", + "63.218.12.0/23", + "63.216.0.0/13", + "209.9.224.0/19", + "63.217.88.0/21", + "205.177.198.0/24", + "63.222.191.0/24", + "205.177.196.0/22", + "185.77.60.0/22", + "205.177.216.0/21", + "63.222.68.0/24", + "63.221.154.0/24", + "63.218.244.0/24", + "63.218.234.0/23", + "63.222.190.0/24", + "195.21.192.0/18", + "82.110.64.0/19", + "209.9.40.0/21", + "217.156.163.0/24", + "205.252.80.0/21", + "205.177.232.0/24", + "205.177.233.0/24", + "63.222.58.0/24", + "82.110.0.0/19", + "63.223.20.0/24", + "63.218.66.0/24", + "63.218.144.0/23", + "63.223.211.0/24", + "63.218.188.0/23", + "209.9.139.0/24", + "63.222.47.0/24", + "209.9.138.0/24", + "63.221.246.0/24", + "208.20.64.0/19", + "63.218.136.0/24", + "2400:8800:6000::/35", + "206.161.224.0/22", + "2400:8800:fc0e::/48", + "63.222.162.0/24", + "209.9.36.0/22", + "82.108.16.0/20", + "63.222.70.0/24", + "2400:8800:8000::/35", + "63.222.49.0/24", + "2400:8800:e000::/35", + "207.226.224.0/21", + "2400:8800:fc08::/48", + "63.221.152.0/21", + "207.226.216.0/22", + "63.216.151.0/24", + "205.252.168.0/21", + "63.217.168.0/24", + "63.223.11.0/24", + "63.222.4.0/23", + "63.216.150.0/24", + "63.221.245.0/24", + "209.8.178.0/24", + "63.221.192.0/21", + "207.226.32.0/20", + "63.221.181.0/24", + "205.177.132.0/22", + "63.223.64.0/18", + "31.59.78.0/24", + "209.8.240.0/21", + "41.221.216.0/24", + "87.83.176.0/20", + "63.223.156.0/24", + "63.218.174.0/23", + "63.216.35.0/24", + "63.217.80.0/21", + "205.177.234.0/24", + "63.223.192.0/20", + "63.216.176.0/24", + "168.90.92.0/23", + "207.226.244.0/22", + "72.57.255.0/24", + "63.222.33.0/24", + "87.83.128.0/19", + "63.223.27.0/24", + "87.82.64.0/18", + "65.72.0.0/20", + "206.161.248.0/22", + "63.221.155.0/24", + "63.223.44.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 0 unexpected prefix(es), 563 missing" + }, + { + "id": "a9d6f8c9de1be764", + "asn": "15290", + "ts": "2026-07-12T23:11:58.564Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "1d3199ef281b6179", + "asn": "34702", + "ts": "2026-07-12T23:41:59.284Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "0feebc49980d0a87", + "asn": "22616", + "ts": "2026-07-13T00:41:52.223Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.122.0/23", + "137.31.126.0/23", + "137.31.120.0/23", + "155.95.86.0/24", + "205.220.12.0/23", + "137.31.114.0/23", + "137.31.128.0/23", + "137.31.124.0/23", + "140.232.189.0/24", + "2605:4300:e500::/40", + "140.232.188.0/24", + "137.31.119.0/24", + "205.220.14.0/23", + "140.232.190.0/24", + "137.31.101.0/24", + "165.225.99.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "f846bdb0d27d6561", + "asn": "396986", + "ts": "2026-07-13T02:11:50.155Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.45.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "3676953248859880", + "asn": "132372", + "ts": "2026-07-13T02:41:52.121Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "37ffb8525b7d3687", + "asn": "138699", + "ts": "2026-07-13T04:41:50.620Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "31c5d66b6db97b98", + "asn": "24940", + "ts": "2026-07-13T05:41:49.883Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5a0baa1caa457590", + "asn": "3491", + "ts": "2026-07-13T05:41:51.271Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "040faa46dba58aa3", + "asn": "15290", + "ts": "2026-07-13T05:41:51.606Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "f30104d2fd4ba0a3", + "asn": "34702", + "ts": "2026-07-13T06:11:51.811Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "8503f36f1c41772e", + "asn": "22616", + "ts": "2026-07-13T07:11:53.833Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.190.0/24", + "137.31.114.0/23", + "137.31.120.0/23", + "140.232.189.0/24", + "137.31.124.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "137.31.122.0/23", + "205.220.12.0/23", + "140.232.188.0/24", + "137.31.126.0/23", + "205.220.14.0/23", + "137.31.101.0/24", + "155.95.86.0/24", + "137.31.128.0/23", + "165.225.99.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "d6346fdbe37cb7fe", + "asn": "396986", + "ts": "2026-07-13T08:11:50.334Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "71.18.66.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "71.18.45.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "101.45.6.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "adc042e7d8d8fdb7", + "asn": "132372", + "ts": "2026-07-13T09:11:51.660Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f1bd703d35b638b0", + "asn": "138699", + "ts": "2026-07-13T11:11:50.348Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "84e030c669d7f3ae", + "asn": "15290", + "ts": "2026-07-13T11:41:52.551Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "4c7ce4b36230283c", + "asn": "24940", + "ts": "2026-07-13T12:11:49.877Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d5b922f7b68cd935", + "asn": "3491", + "ts": "2026-07-13T12:11:50.759Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "02a41fbf0e8f3852", + "asn": "34702", + "ts": "2026-07-13T12:41:51.255Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "61a821f19579ee13", + "asn": "22616", + "ts": "2026-07-13T13:41:55.649Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.122.0/23", + "155.95.86.0/24", + "137.31.119.0/24", + "205.220.12.0/23", + "205.220.14.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "137.31.101.0/24", + "140.232.189.0/24", + "2605:4300:e500::/40", + "137.31.120.0/23", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "455c75c307c753d3", + "asn": "396986", + "ts": "2026-07-13T14:11:56.248Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.15.0/24", + "71.18.44.0/24", + "101.45.202.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "2605:340:f04a::/48", + "71.18.45.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "2605:340:f049::/48", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "b2a32473beacd466", + "asn": "132372", + "ts": "2026-07-13T15:11:54.566Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "e5e2b4f41e7e4f36", + "asn": "138699", + "ts": "2026-07-13T17:41:50.252Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "838caa6c23611549", + "asn": "15290", + "ts": "2026-07-13T18:11:51.020Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "29b2d67623bc2e8b", + "asn": "24940", + "ts": "2026-07-13T18:41:49.886Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f4c29cf135de2e7e", + "asn": "3491", + "ts": "2026-07-13T18:41:50.840Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "25b90df07b21f963", + "asn": "34702", + "ts": "2026-07-13T18:41:51.305Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d2434772c22c873c", + "asn": "22616", + "ts": "2026-07-13T20:11:52.196Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.124.0/23", + "205.220.14.0/23", + "137.31.120.0/23", + "137.31.128.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "137.31.126.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "155.95.86.0/24", + "205.220.12.0/23", + "137.31.26.0/23", + "137.31.114.0/23", + "137.31.101.0/24", + "137.31.24.0/23", + "137.31.122.0/23", + "140.232.189.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "3046f29f6a507b91", + "asn": "396986", + "ts": "2026-07-13T20:41:50.594Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "2605:340:f04a::/48", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.15.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.45.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "2605:340:f049::/48", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "102e6a900ff882c2", + "asn": "132372", + "ts": "2026-07-13T21:41:52.813Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "09b4ce6ae1175fd1", + "asn": "138699", + "ts": "2026-07-14T00:11:50.191Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "4364d6fca935316d", + "asn": "15290", + "ts": "2026-07-14T00:11:51.032Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "de335bc14d813fd7", + "asn": "24940", + "ts": "2026-07-14T00:41:49.895Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "68bc08f89a8b7b7b", + "asn": "3491", + "ts": "2026-07-14T00:41:51.162Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "d7b4dd3fd3e6de16", + "asn": "34702", + "ts": "2026-07-14T00:41:51.618Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e3680131043d1aae", + "asn": "22616", + "ts": "2026-07-14T02:11:53.538Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.124.0/23", + "205.220.14.0/23", + "137.31.120.0/23", + "137.31.128.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "137.31.126.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "155.95.86.0/24", + "205.220.12.0/23", + "137.31.26.0/23", + "137.31.114.0/23", + "137.31.101.0/24", + "137.31.24.0/23", + "137.31.122.0/23", + "140.232.189.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "df5aff9d319a6a0f", + "asn": "396986", + "ts": "2026-07-14T02:41:51.100Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "2605:340:f04a::/48", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.15.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.45.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "2605:340:f049::/48", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "89e5c396b0caa983", + "asn": "132372", + "ts": "2026-07-14T04:11:51.344Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "cac9ac05a0d2d4d5", + "asn": "138699", + "ts": "2026-07-14T06:11:50.226Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "54920db9437a85d8", + "asn": "15290", + "ts": "2026-07-14T06:11:51.062Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "d1e4220da8c661c5", + "asn": "24940", + "ts": "2026-07-14T07:29:51.487Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "227e25310dc187ea", + "asn": "3491", + "ts": "2026-07-14T07:29:52.382Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "4c2b86df4b35661f", + "asn": "34702", + "ts": "2026-07-14T07:29:52.821Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "890815d07e320e84", + "asn": "22616", + "ts": "2026-07-14T08:29:54.437Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.128.0/23", + "205.220.14.0/23", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.126.0/23", + "137.31.122.0/23", + "140.232.188.0/24", + "137.31.101.0/24", + "137.31.124.0/23", + "137.31.24.0/23", + "155.95.86.0/24", + "140.232.189.0/24", + "137.31.26.0/23", + "205.220.12.0/23", + "165.225.99.0/24", + "140.232.190.0/24", + "137.31.120.0/23", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "108e1e37816c2d41", + "asn": "396986", + "ts": "2026-07-14T08:59:51.732Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.202.0/24", + "71.18.45.0/24", + "2605:340:f049::/48", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "71cb4c947b5fd779", + "asn": "132372", + "ts": "2026-07-14T10:29:56.468Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "53f5edbcb491119f", + "asn": "138699", + "ts": "2026-07-14T12:29:51.656Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a022294693abaa6e", + "asn": "15290", + "ts": "2026-07-14T12:29:52.484Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "3aa8edf63c63b215", + "asn": "24940", + "ts": "2026-07-14T13:29:51.921Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "538b10324ca77d0c", + "asn": "3491", + "ts": "2026-07-14T13:29:53.990Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "75b83894c28c1342", + "asn": "34702", + "ts": "2026-07-14T13:29:54.748Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "da7d28d14bf6400d", + "asn": "22616", + "ts": "2026-07-14T14:30:03.410Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "137.31.120.0/23", + "140.232.189.0/24", + "137.31.24.0/23", + "137.31.124.0/23", + "137.31.26.0/23", + "140.232.188.0/24", + "165.225.99.0/24", + "137.31.126.0/23", + "140.232.190.0/24", + "155.95.86.0/24", + "137.31.101.0/24", + "137.31.119.0/24", + "205.220.14.0/23", + "137.31.114.0/23", + "2605:4300:e500::/40", + "205.220.12.0/23", + "137.31.122.0/23", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "7156c0cd3d01adeb", + "asn": "396986", + "ts": "2026-07-14T15:29:52.006Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "71.18.45.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "2605:340:f04a::/48", + "71.18.71.0/24", + "71.18.66.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.199.0/24", + "2605:340:f049::/48", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "8ea2453d73ab95a8", + "asn": "132372", + "ts": "2026-07-14T16:59:53.436Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "8169c1fdd2bff25f", + "asn": "138699", + "ts": "2026-07-14T18:29:51.705Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "9a45eded7bbde30e", + "asn": "15290", + "ts": "2026-07-14T18:29:52.554Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "9f602b507e053fe9", + "asn": "24940", + "ts": "2026-07-14T19:59:51.360Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "e3fca5a660644a47", + "asn": "3491", + "ts": "2026-07-14T19:59:52.246Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "ac981860008fae42", + "asn": "34702", + "ts": "2026-07-14T19:59:52.842Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3bbe047e16df0480", + "asn": "22616", + "ts": "2026-07-14T20:59:54.362Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "137.31.101.0/24", + "205.220.12.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "137.31.24.0/23", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.119.0/24", + "2605:4300:e500::/40", + "205.220.14.0/23", + "137.31.122.0/23", + "137.31.126.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "137.31.120.0/23", + "137.31.26.0/23", + "165.225.99.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "acedee638859fec5", + "asn": "396986", + "ts": "2026-07-14T21:59:51.677Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.15.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "71.18.64.0/24", + "2605:340:f049::/48", + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "9a4fa58e438b1a35", + "asn": "132372", + "ts": "2026-07-14T23:29:56.722Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0b0a20947ca1b4a1", + "asn": "138699", + "ts": "2026-07-15T00:59:51.661Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "268febdf4f8b8be3", + "asn": "15290", + "ts": "2026-07-15T00:59:52.476Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "366e6cbbbc89340c", + "asn": "24940", + "ts": "2026-07-15T01:59:51.361Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "7e19c9cf7db18df2", + "asn": "3491", + "ts": "2026-07-15T01:59:52.321Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "a9658646462e1416", + "asn": "34702", + "ts": "2026-07-15T02:29:52.810Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "44d63311918b4fd7", + "asn": "22616", + "ts": "2026-07-15T03:29:54.203Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.124.0/23", + "137.31.120.0/23", + "2605:4300:e500::/40", + "137.31.101.0/24", + "137.31.119.0/24", + "140.232.188.0/24", + "137.31.126.0/23", + "205.220.14.0/23", + "137.31.24.0/23", + "155.95.86.0/24", + "205.220.12.0/23", + "140.232.190.0/24", + "137.31.114.0/23", + "137.31.26.0/23", + "165.225.99.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "aba848e0c0078785", + "asn": "396986", + "ts": "2026-07-15T03:59:51.702Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.14.0/24", + "2605:340:f04a::/48", + "101.45.202.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "71.18.45.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "2605:340:f049::/48", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "5e648fa861caabcb", + "asn": "132372", + "ts": "2026-07-15T05:59:52.969Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f50fd3d9b019f60f", + "asn": "138699", + "ts": "2026-07-15T06:59:51.698Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "23031dac4ec96573", + "asn": "15290", + "ts": "2026-07-15T06:59:52.674Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "a46b8ca977e0cfc5", + "asn": "24940", + "ts": "2026-07-15T07:59:51.363Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "67491773ba454e26", + "asn": "3491", + "ts": "2026-07-15T07:59:53.053Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "9fde972e84297ad9", + "asn": "34702", + "ts": "2026-07-15T08:59:52.292Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "32a6ba0b811278bb", + "asn": "22616", + "ts": "2026-07-15T09:59:53.724Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.124.0/23", + "137.31.120.0/23", + "2605:4300:e500::/40", + "137.31.101.0/24", + "137.31.119.0/24", + "140.232.188.0/24", + "137.31.126.0/23", + "205.220.14.0/23", + "137.31.24.0/23", + "155.95.86.0/24", + "205.220.12.0/23", + "140.232.190.0/24", + "137.31.114.0/23", + "137.31.26.0/23", + "165.225.99.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "b72903d54d8d8705", + "asn": "396986", + "ts": "2026-07-15T10:29:51.682Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.14.0/24", + "2605:340:f04a::/48", + "101.45.202.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "71.18.45.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "2605:340:f049::/48", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "4a2318801159ada4", + "asn": "132372", + "ts": "2026-07-15T11:59:53.119Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "8fdaa6a50cb01891", + "asn": "138699", + "ts": "2026-07-15T13:29:51.615Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "5943d1de345838ac", + "asn": "15290", + "ts": "2026-07-15T13:29:52.431Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "11d64812f7d25748", + "asn": "24940", + "ts": "2026-07-15T13:59:51.366Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "1275ffa07a209ece", + "asn": "3491", + "ts": "2026-07-15T14:29:51.794Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "8df39b422cdb9693", + "asn": "34702", + "ts": "2026-07-15T14:59:52.749Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "ef7fe7860371b6c7", + "asn": "396986", + "ts": "2026-07-15T16:29:51.704Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.6.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "2605:340:f049::/48", + "71.18.45.0/24", + "101.45.15.0/24", + "71.18.66.0/24", + "101.45.202.0/24", + "2605:340:f04a::/48", + "71.18.44.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "14d4c48ce7317e03", + "asn": "22616", + "ts": "2026-07-15T16:29:53.752Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "140.232.190.0/24", + "155.95.86.0/24", + "140.232.188.0/24", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.128.0/23", + "137.31.24.0/23", + "165.225.99.0/24", + "137.31.101.0/24", + "205.220.12.0/23", + "137.31.120.0/23", + "137.31.124.0/23", + "137.31.26.0/23", + "137.31.122.0/23", + "137.31.126.0/23", + "137.31.114.0/23", + "205.220.14.0/23", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "3c915ae1bf8a755e", + "asn": "132372", + "ts": "2026-07-15T18:29:53.011Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "fe4018f500c85f61", + "asn": "138699", + "ts": "2026-07-15T19:29:52.219Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "bc655a6f3f565c2b", + "asn": "15290", + "ts": "2026-07-15T19:29:53.248Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "341a4a5416d53fb4", + "asn": "24940", + "ts": "2026-07-15T19:59:51.372Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "0739880a09b2e60e", + "asn": "3491", + "ts": "2026-07-15T20:59:51.838Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "176f637eb9f4b8a0", + "asn": "34702", + "ts": "2026-07-15T21:29:53.213Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3497eb91f0a1804b", + "asn": "396986", + "ts": "2026-07-15T22:29:51.711Z", + "severity": "CRITICAL", + "unexpected": [ + "2605:340:f04a::/48", + "101.45.199.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.6.0/24", + "101.45.202.0/24", + "2605:340:f049::/48", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.45.0/24", + "71.18.64.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "abf9968f49c729b7", + "asn": "22616", + "ts": "2026-07-15T22:29:53.837Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "137.31.114.0/23", + "155.95.86.0/24", + "165.225.99.0/24", + "137.31.124.0/23", + "2605:4300:e500::/40", + "137.31.101.0/24", + "205.220.12.0/23", + "137.31.119.0/24", + "205.220.14.0/23", + "137.31.128.0/23", + "137.31.26.0/23", + "137.31.120.0/23", + "137.31.24.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "137.31.122.0/23", + "137.31.126.0/23", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "db1240cf335bd1fb", + "asn": "132372", + "ts": "2026-07-16T00:29:53.114Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "6daaace7b94cbf39", + "asn": "24940", + "ts": "2026-07-16T01:59:51.622Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "b91f3e602fd81ca1", + "asn": "138699", + "ts": "2026-07-16T01:59:52.148Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "8b02d291a1af8c3d", + "asn": "15290", + "ts": "2026-07-16T01:59:53.019Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "496424b0fc064555", + "asn": "3491", + "ts": "2026-07-16T02:59:52.248Z", + "severity": "CRITICAL", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "9088627d62eade29", + "asn": "34702", + "ts": "2026-07-16T03:59:52.690Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "6dd656f19f6a1924", + "asn": "396986", + "ts": "2026-07-16T04:29:51.725Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "101.45.199.0/24", + "2605:340:f04a::/48", + "101.45.202.0/24", + "71.18.66.0/24", + "101.45.15.0/24", + "71.18.44.0/24", + "101.45.6.0/24", + "71.18.45.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "2605:340:f049::/48", + "101.45.14.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "5d4e90a8549f3771", + "asn": "22616", + "ts": "2026-07-16T04:59:53.845Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.24.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "137.31.120.0/23", + "137.31.114.0/23", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.26.0/23", + "137.31.126.0/23", + "137.31.122.0/23", + "140.232.189.0/24", + "137.31.128.0/23", + "140.232.190.0/24", + "137.31.124.0/23", + "155.95.86.0/24", + "165.225.99.0/24", + "205.220.12.0/23", + "140.232.188.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "c37eb29c5c54c5a1", + "asn": "132372", + "ts": "2026-07-16T06:29:59.070Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + } +] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 5ff6c1f..9b05a43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "cheerio": "^1.0.0", "node-whois": "^2.1.3", "ollama": "^0.5.12", + "puppeteer": "^24.42.0", "zod": "^3.24.0" }, "bin": { @@ -50,6 +51,20 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -64,7 +79,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1063,6 +1077,53 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", "license": "BSD-3-Clause" }, + "node_modules/@puppeteer/browsers": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.0.tgz", + "integrity": "sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.4", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@puppeteer/browsers/node_modules/tar-fs": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.2.tgz", + "integrity": "sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/@puppeteer/browsers/node_modules/tar-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.0.tgz", + "integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "bare-fs": "^4.5.5", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.60.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.0.tgz", @@ -1155,9 +1216,6 @@ "arm" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1172,9 +1230,6 @@ "arm" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1189,9 +1244,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1206,9 +1258,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1223,9 +1272,6 @@ "loong64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1240,9 +1286,6 @@ "loong64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1257,9 +1300,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1274,9 +1314,6 @@ "ppc64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1291,9 +1328,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1308,9 +1342,6 @@ "riscv64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1325,9 +1356,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1342,9 +1370,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1359,9 +1384,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1452,6 +1474,12 @@ "win32" ] }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT" + }, "node_modules/@types/better-sqlite3": { "version": "7.6.13", "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", @@ -1485,6 +1513,16 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.57.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz", @@ -1900,6 +1938,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/ajv": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", @@ -1965,7 +2012,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/assertion-error": { @@ -1978,6 +2024,32 @@ "node": ">=12" } }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/b4a": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz", + "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==", + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -1988,6 +2060,97 @@ "node": "18 || 20 || >=22" } }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz", + "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.0.tgz", + "integrity": "sha512-JTjuZyNIDpw+GytMO4a6TK1VXdVKKJr6DRxEHasyuYyShV2deuiHJK/ahGZlebc+SG0/wJCB9XK8gprBGDFi/Q==", + "license": "Apache-2.0", + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "license": "Apache-2.0", + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.1.tgz", + "integrity": "sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==", + "license": "Apache-2.0", + "dependencies": { + "streamx": "^2.25.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-abort-controller": "*", + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.2.tgz", + "integrity": "sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A==", + "license": "Apache-2.0", + "dependencies": { + "bare-path": "^3.0.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2008,6 +2171,15 @@ ], "license": "MIT" }, + "node_modules/basic-ftp": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/better-sqlite3": { "version": "11.10.0", "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", @@ -2122,6 +2294,15 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -2174,7 +2355,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2272,6 +2452,19 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "license": "ISC" }, + "node_modules/chromium-bidi": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-14.0.0.tgz", + "integrity": "sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==", + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -2426,6 +2619,32 @@ "url": "https://opencollective.com/express" } }, + "node_modules/cosmiconfig": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2468,6 +2687,15 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -2526,6 +2754,20 @@ "dev": true, "license": "MIT" }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2544,6 +2786,12 @@ "node": ">=8" } }, + "node_modules/devtools-protocol": { + "version": "0.0.1595872", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1595872.tgz", + "integrity": "sha512-kRfgp8vWVjBu/fbYCiVFiOqsCk3CrMKEo3WbgGT2NXK2dG7vawWPBljixajVgGK9II8rDO9G0oD0zLt3I1daRg==", + "license": "BSD-3-Clause" + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -2676,6 +2924,24 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -2783,6 +3049,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, "node_modules/eslint": { "version": "9.39.4", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", @@ -2982,6 +3269,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -3012,7 +3312,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -3032,7 +3331,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -3047,6 +3345,15 @@ "node": ">= 0.6" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/eventsource": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", @@ -3148,12 +3455,38 @@ "express": ">= 4.11" } }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3184,6 +3517,15 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -3391,6 +3733,21 @@ "node": ">= 0.4" } }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-tsconfig": { "version": "4.13.7", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", @@ -3404,6 +3761,20 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -3604,6 +3975,32 @@ "url": "https://opencollective.com/express" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -3650,7 +4047,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -3703,6 +4099,12 @@ "node": ">= 0.10" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3826,11 +4228,16 @@ "url": "https://github.com/sponsors/panva" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -3846,6 +4253,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -3889,6 +4302,12 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -4075,6 +4494,12 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -4128,6 +4553,15 @@ "node": ">= 0.6" } }, + "node_modules/netmask": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/node-abi": { "version": "3.89.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.89.0.tgz", @@ -4274,6 +4708,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -4285,7 +4751,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -4294,6 +4759,24 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -4415,11 +4898,16 @@ "node": ">= 14.16" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -4519,6 +5007,15 @@ "node": ">= 0.8.0" } }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/protobufjs": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", @@ -4556,6 +5053,40 @@ "node": ">= 0.10" } }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/pump": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", @@ -4576,6 +5107,45 @@ "node": ">=6" } }, + "node_modules/puppeteer": { + "version": "24.42.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.42.0.tgz", + "integrity": "sha512-94MoPfFp2eY3eYIMdINkez4IOP5TMHntlZbVx06fHlQTtiQiYgaY0L2Zzfod8PVUkPqP7m3Qlre2v8YS8cudPA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.13.0", + "chromium-bidi": "14.0.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1595872", + "puppeteer-core": "24.42.0", + "typed-query-selector": "^2.12.1" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core": { + "version": "24.42.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.42.0.tgz", + "integrity": "sha512-T4zXokk/izH01fYPhyyev1A4piWiOKrYq7CUFpdoYQxmOnXoV6YjUabmfIjCYkNspSoAXIxRid3Tw+Vg0fthYg==", + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.13.0", + "chromium-bidi": "14.0.0", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1595872", + "typed-query-selector": "^2.12.1", + "webdriver-bidi-protocol": "0.4.1", + "ws": "^8.19.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/qs": { "version": "6.15.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", @@ -4700,7 +5270,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -5024,6 +5593,63 @@ "simple-concat": "^1.0.0" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.8.tgz", + "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks/node_modules/ip-address": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.1.tgz", + "integrity": "sha512-1FMu8/N15Ck1BL551Jf42NYIoin2unWjLQ2Fze/DXryJRl5twqtwNHlO39qERGbIOcKYWHdgRryhOC+NG4eaLw==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -5057,6 +5683,17 @@ "dev": true, "license": "MIT" }, + "node_modules/streamx": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz", + "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==", + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -5224,6 +5861,15 @@ "node": ">=6" } }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, "node_modules/test-exclude": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz", @@ -5239,6 +5885,15 @@ "node": ">=18" } }, + "node_modules/text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -5322,6 +5977,12 @@ "typescript": ">=4.8.4" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/tsx": { "version": "4.21.0", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", @@ -5381,11 +6042,17 @@ "node": ">= 0.6" } }, + "node_modules/typed-query-selector": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz", + "integrity": "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==", + "license": "MIT" + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -6028,6 +6695,12 @@ } } }, + "node_modules/webdriver-bidi-protocol": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.1.tgz", + "integrity": "sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==", + "license": "Apache-2.0" + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -6208,6 +6881,27 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, + "node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -6285,6 +6979,16 @@ "node": ">=8" } }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index b0ab52c..83200d5 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "cheerio": "^1.0.0", "node-whois": "^2.1.3", "ollama": "^0.5.12", + "puppeteer": "^24.42.0", "zod": "^3.24.0" }, "devDependencies": { diff --git a/public/index.html b/public/index.html index 243275e..78bbb26 100644 --- a/public/index.html +++ b/public/index.html @@ -415,6 +415,18 @@ body.dark .card{border-top-color:#e8e4dc} .ac-name { font-family: var(--body); font-size: .82rem; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ac-meta { font-family: var(--mono); font-size: .6rem; color: var(--muted); white-space: nowrap; } .ac-source { font-family: var(--mono); font-size: .55rem; color: var(--dim); margin-left: auto; padding-left: .4rem; white-space: nowrap; } + +.pdf-menu-item { + display: block; + padding: .45rem 1rem; + font-family: var(--mono); + font-size: .72rem; + color: var(--text); + text-decoration: none; + border-bottom: 1px solid var(--border); +} +.pdf-menu-item:last-child { border-bottom: none; } +.pdf-menu-item:hover { background: var(--purple); color: #fff !important; } @@ -437,6 +449,7 @@ body.dark .card{border-top-color:#e8e4dc} RIPE Atlas Route Views bgproutes.io + Adoption ✦ @@ -556,7 +569,7 @@ body.dark .card{border-top-color:#e8e4dc} -
+
ASPA Status @@ -813,7 +826,7 @@ body.dark .card{border-top-color:#e8e4dc}
🔐
-
+
ASPA (IETF draft, not yet an RFC)
AS Provider Authorization from Cloudflare RPKI JSON feed. Draft-compliant upstream/downstream path verification with valley detection.
IETF Draft
@@ -932,6 +945,7 @@ body.dark .card{border-top-color:#e8e4dc} RIPE Stat RIPE Atlas bgproutes.io + Adoption ✦ GitHub @@ -1459,6 +1473,17 @@ function renderDashboard(d) { if (n.looking_glass) ov += 'Looking Glass'; if (n.route_server) ov += 'Route Server'; ov += '⬇ Raw JSON'; + ov += ''; + ov += 'Addon only for Izzy'; + ov += ''; + ov += ''; + ov += '⬇ PDF ▾'; + ov += ''; + ov += ''; ov += '
'; $('overviewContent').innerHTML = ov; @@ -2056,6 +2081,9 @@ async function doCompare() { } h += '
Compared in ' + d.meta.duration_ms + 'ms
'; + h += '
'; + h += '⬇ Download Comparison PDF'; + h += '
'; $('compareResults').innerHTML = h; } catch (e) { $('compareResults').innerHTML = '
Compare failed: ' + escHtml(e.message) + '
'; @@ -2699,6 +2727,10 @@ function renderFullCompare(d) { h += '
'; h += '
Compared in ' + d.meta.duration_ms + 'ms
'; + h += '
'; + h += 'Addon only for Izzy'; + h += '⬇ Download Comparison PDF'; + h += '
'; h += ''; // end card panel.innerHTML = h; @@ -4317,6 +4349,18 @@ function renderSourceTiming(d) { } // ── Raw JSON Export ──────────────────────────────────────────── +function togglePdfMenu(e) { + e.preventDefault(); + e.stopPropagation(); + var menu = document.getElementById('pdfMenu'); + if (!menu) return; + menu.style.display = menu.style.display === 'none' ? 'block' : 'none'; +} +document.addEventListener('click', function() { + var menu = document.getElementById('pdfMenu'); + if (menu) menu.style.display = 'none'; +}); + function exportRawJson(e) { e.preventDefault(); if (!window._lastLookupData) { alert('No lookup data available.'); return; } @@ -4417,5 +4461,314 @@ document.addEventListener('keydown', e => { if (e.key === 'Escape') closeChangel
+ + + + + + diff --git a/public/index.html.bak-20260429_211603 b/public/index.html.bak-20260429_211603 new file mode 100644 index 0000000..243275e --- /dev/null +++ b/public/index.html.bak-20260429_211603 @@ -0,0 +1,4421 @@ + + + + + +PeerCortex — The ASN News + + + + + + + + + + + +
+
+
+ +
The ASN News
+
+
The ASN News
peercortex.org · v0.6.9 · routing intelligence
GitHub · Changelog · Blog · ☕ Buy me a coffee
+
+
+ +
+
+ + +
+
+ ASN / Prefix / Org +
+ + +
+ +
+
+
+ + +
+ + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + diff --git a/public/public/design-draft-editorial.html b/public/public/design-draft-editorial.html new file mode 100644 index 0000000..b8aede4 --- /dev/null +++ b/public/public/design-draft-editorial.html @@ -0,0 +1,1129 @@ + + + + + +PeerCortex — Craft Editorial Draft + + + + + + + + +
+
+
+
PeerCortexβ
+
+
+ Network Intelligence
+ peercortex.org +
+
+
+ +
+
+ + +
+
+ ASN / Prefix / Org + + +
+
+ + +
+ + +
+ + +
+ +
+ ASNAS15169 + · + ARIN + · + US +
+

Google LLC

+ +
+

+ Google LLC operates one of the largest and most interconnected autonomous + systems on the internet, maintaining a global PoP footprint across six + continents. Its routing policy is broadly open, with full RPKI coverage + and a mature ASPA deployment. The network scores in the top 2% of all + tracked ASNs by data quality. +

+
+ + +
+
+
97
+
Health Score
+
13/13 checks pass
+
+
+
4,682
+
IPv4 Prefixes
+
announced routes
+
+
+
1,104
+
IPv6 Prefixes
+
announced routes
+
+
+
426
+
Peers
+
direct sessions
+
+
+ + +
+
+ Security & Policy +
+
+
+ +
+
+
+
RPKI Origin Validation
+
VALID
+
4,682 of 4,682 prefixes signed
+
+
+ +
+
+
+
ASPA
+
DEPLOYED
+
RFC 9582 — provider set complete
+
+
+ +
+
+
+
IRR Consistency
+
CONSISTENT
+
ARIN DB matches announced routes
+
+
+ +
+
+
+
Route Leak Guard
+
PARTIAL
+
2 peers without max-prefix
+
+
+ +
+
+ + +
+ Compare with + + + +
+ + +
+
+ IPv4 Announced Prefixes + showing 8 of 4,682 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PrefixDescriptionRPKIIRRRoutes
8.8.8.0/24Google DNS AnycastVALID✓ ARIN12
8.8.4.0/24Google DNS AnycastVALID✓ ARIN11
8.34.208.0/20GOOGLE-CLOUD-EMEAVALID✓ ARIN9
34.64.0.0/10Google Cloud GFEVALID✓ ARIN18
66.102.0.0/20GOOGLE-FRONTENDVALID✓ ARIN7
74.125.0.0/16GOOGLE-CORP-COREVALID✓ ARIN24
142.250.0.0/15GOOGLE-EDGE-NODESUNKNOWN✓ ARIN31
GOOGLE-PRODVALID✓ ARIN19
+
+ Show all 4,682 prefixes → +
+
+ + +
+
+ Health Report + 13 of 13 checks passed +
+
+
+
+
+
+
RPKI fully deployed
+
100% of prefixes have valid ROAs
+
+
+
+
+
+
IRR consistent
+
AS-SET GOOGLE matches route objects
+
+
+
+
+
+
No RPKI invalids
+
0 invalid prefixes detected
+
+
+
+
+
+
ASPA record present
+
RFC 9582 provider authorisation
+
+
+
+
+
+
No bogons announced
+
No RFC 1918 / special-use prefixes
+
+
+
+
+
+
No long-lived hijacks
+
No overlapping prefix conflicts
+
+
+
+
+
+
Prefix not too specific
+
No /25+ IPv4 leaks detected
+
+
+
+
+
+
BGP community usage
+
Informational communities present
+
+
+
+
+
+
IPv6 deployed
+
1,104 IPv6 prefixes announced
+
+
+
+
+
+
Route diversity
+
Multiple upstream paths observed
+
+
+
+
+
+
AS path length normal
+
Avg prepend length ≤ 3
+
+
+
+
+
+
PeeringDB present
+
Record up to date
+
+
+
+
+
+
NOC contact reachable
+
Email + phone verified
+
+
+ +
+
+ + +
+
+ Upstream / Transit + top 6 by path frequency +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ASNOrganisationRelationshipPath frequency
Vodafone Group PLCTRANSIT34%
Cogent CommunicationsTRANSIT28%
GTT CommunicationsPEER17%
Sprint / T-MobilePEER12%
TATA CommunicationsTRANSIT6%
Lumen TechnologiesPEER3%
+
+ +
+ + + + +
+ + + + + + diff --git a/public/public/index-classic.html b/public/public/index-classic.html new file mode 100644 index 0000000..64d2355 --- /dev/null +++ b/public/public/index-classic.html @@ -0,0 +1,2898 @@ + + + + + +PeerCortex - Network Intelligence Dashboard + + + + + + + + + + +
+
+ + +
+
+ + +
+ +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/public/index-editorial.html b/public/public/index-editorial.html new file mode 100644 index 0000000..8816b12 --- /dev/null +++ b/public/public/index-editorial.html @@ -0,0 +1,3332 @@ + + + + + +PeerCortex — The ASN News + + + + + + + + + + +
+
+
+ +
The ASN News
+
+
The ASN News
v2.peercortex.org · routing intelligence
+
+
+ +
+
+ + +
+
+ ASN / Prefix / Org + + +
+
+
+ + +
+ + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + diff --git a/public/public/index.html b/public/public/index.html new file mode 100644 index 0000000..b871288 --- /dev/null +++ b/public/public/index.html @@ -0,0 +1,4126 @@ + + + + + +PeerCortex — The ASN News + + + + + + + + + + + +
+
+
+ +
The ASN News
+
+
The ASN News
peercortex.org · v0.6.9 · routing intelligence
+
+
+ +
+
+ + +
+
+ ASN / Prefix / Org +
+ + +
+ +
+
+
+ + +
+ + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + diff --git a/public/public/index.html.bak b/public/public/index.html.bak new file mode 100644 index 0000000..80b53a7 --- /dev/null +++ b/public/public/index.html.bak @@ -0,0 +1,2357 @@ + + + + + +PeerCortex - Network Intelligence Dashboard + + + + + + + + +
+
+ + +
+
+ + +
+ +
+
+ + +
+ + + + + + + + + + + + + + + + diff --git a/public/public/lia.html b/public/public/lia.html new file mode 100644 index 0000000..64d49ab --- /dev/null +++ b/public/public/lia.html @@ -0,0 +1,488 @@ + + + + + +Lia's Paradise — RIPE Atlas Coverage Explorer + + + +
+

Lia's Paradise

+

RIPE Atlas Coverage Explorer — Networks without Atlas Probes, Anchors & Software Probes

+
For Lia, who makes the Internet measurable — one probe at a time
+
+ +
+ +
+ + + + + + +
+ +
+ +
+
+
+
FILE LOOKUP
+
Upload a file with ASNs or company names — we'll check probe coverage for each
+
+ + +
+ +
+
+ +
+ +
+ +
+
Loading Atlas coverage data across all RIRs... This may take a moment.
+
+ + + + + + diff --git a/public/public/shell.html b/public/public/shell.html new file mode 100644 index 0000000..79310fc --- /dev/null +++ b/public/public/shell.html @@ -0,0 +1,420 @@ + + + + + +PeerCortex Shell — Feedback Admin + + + + +
+
+ + + + shell.peercortex.org — admin terminal +
+
+
+ shell:~$ + +
+
+ + + + diff --git a/scripts/refresh-peeringdb.sh b/scripts/refresh-peeringdb.sh new file mode 100755 index 0000000..13bd1e6 --- /dev/null +++ b/scripts/refresh-peeringdb.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Refresh PeeringDB SQLite mirror daily + +LOG=/var/log/peercortex/peeringdb-refresh.log +mkdir -p /var/log/peercortex +exec >> $LOG 2>&1 + +echo "[$(date +%Y-%m-%dT%H:%M:%S)] Starting PeeringDB sync..." +cd /opt/peeringdb-data +peeringdb sync -q +echo "[$(date +%Y-%m-%dT%H:%M:%S)] Sync complete. File: $(du -sh peeringdb.sqlite3 | cut -f1)" diff --git a/scripts/tunnel-cleanup.sh b/scripts/tunnel-cleanup.sh new file mode 100755 index 0000000..7771426 --- /dev/null +++ b/scripts/tunnel-cleanup.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# Auto-heal Cloudflare tunnel: clean stale connectors from foreign IPs +TUNNEL=3262c64b-51d5-479f-ad26-a9925b705bd3 +LOG=/var/log/peercortex/tunnel-cleanup.log + +mkdir -p /var/log/peercortex + +# Restart cloudflared if not running +if ! systemctl is-active --quiet cloudflared; then + echo "[$(date +%Y-%m-%dT%H:%M:%S)] cloudflared not running — starting" >> "$LOG" + systemctl start cloudflared + sleep 5 +fi + +MY_IP=$(curl -s --max-time 5 https://ifconfig.me 2>/dev/null) +[ -z "$MY_IP" ] && exit 0 + +# Connector rows start with a UUID (36 chars: 8-4-4-4-12) +# Column 5 in connector rows = ORIGIN IP +STALE=$(cloudflared tunnel info "$TUNNEL" 2>/dev/null | \ + grep -E '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' | \ + awk -v myip="$MY_IP" '$5 != myip {print $5}') + +if [ -n "$STALE" ]; then + echo "[$(date +%Y-%m-%dT%H:%M:%S)] Stale connectors from $STALE — cleaning" >> "$LOG" + cloudflared tunnel cleanup "$TUNNEL" >> "$LOG" 2>&1 + systemctl restart cloudflared + echo "[$(date +%Y-%m-%dT%H:%M:%S)] Done" >> "$LOG" +fi diff --git a/server.js b/server.js index 70aba62..b3c708b 100644 --- a/server.js +++ b/server.js @@ -3,6 +3,51 @@ const http = require("http"); const https = require("https"); const crypto = require("crypto"); +// ── PDF Export: lazy puppeteer loader ──────────────────────────────────────── +let _puppeteerBrowser = null; +let _puppeteerLoading = false; +async function getPuppeteerBrowser() { + if (_puppeteerBrowser) return _puppeteerBrowser; + if (_puppeteerLoading) { + // Wait for in-flight launch + await new Promise(r => setTimeout(r, 2000)); + return _puppeteerBrowser; + } + _puppeteerLoading = true; + try { + const puppeteer = require("puppeteer"); + _puppeteerBrowser = await puppeteer.launch({ + headless: true, + args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage", "--disable-gpu"] + }); + console.log("[PDF] Puppeteer browser launched"); + _puppeteerBrowser.on("disconnected", () => { + console.log("[PDF] Browser disconnected — will relaunch on next request"); + _puppeteerBrowser = null; + _puppeteerLoading = false; + }); + } catch (e) { + console.error("[PDF] Puppeteer unavailable:", e.message); + _puppeteerBrowser = null; + } + _puppeteerLoading = false; + return _puppeteerBrowser; +} + +// PDF response cache: key = "asn:format" or "compare:asn1:asn2" → {buf, ts} +const pdfCache = new Map(); +const PDF_CACHE_TTL = 5 * 60 * 1000; // 5 minutes + +function pdfCacheGet(key) { + const e = pdfCache.get(key); + if (e && (Date.now() - e.ts) < PDF_CACHE_TTL) return e.buf; + return null; +} +function pdfCacheSet(key, buf) { + if (pdfCache.size > 100) pdfCache.delete(pdfCache.keys().next().value); + pdfCache.set(key, { buf, ts: Date.now() }); +} + // Load .env file const envPath = "/opt/peercortex-app/.env"; try { @@ -360,16 +405,110 @@ function decodeCommunities(communityList) { } // ── Hijack Monitoring ────────────────────────────────────────── -const HIJACK_SUBS_FILE = '/opt/peercortex-app/hijack-subs.json'; -const HIJACK_ALERTS_FILE = '/opt/peercortex-app/hijack-alerts.json'; +// ============================================================ +// FEATURE 1: BGP Hijack Alerting + Webhooks +// ============================================================ +const DATA_DIR = process.env.DATA_DIR || (fs.existsSync('/opt/peercortex-app') ? '/opt/peercortex-app' : __dirname); +const HIJACK_SUBS_FILE = DATA_DIR + '/hijack-subs.json'; +const HIJACK_ALERTS_FILE = DATA_DIR + '/hijack-alerts.json'; +const WEBHOOK_SUBS_FILE = DATA_DIR + '/webhook-subs.json'; +const ASPA_ADOPTION_FILE = DATA_DIR + '/aspa-adoption-history.json'; -function loadHijackSubs() { try { return JSON.parse(fs.readFileSync(HIJACK_SUBS_FILE,'utf8')); } catch(_){ return []; } } -function loadHijackAlerts() { try { return JSON.parse(fs.readFileSync(HIJACK_ALERTS_FILE,'utf8')); } catch(_){ return []; } } +function loadHijackSubs() { try { return JSON.parse(fs.readFileSync(HIJACK_SUBS_FILE,'utf8')); } catch(_){ return []; } } +function loadHijackAlerts() { try { return JSON.parse(fs.readFileSync(HIJACK_ALERTS_FILE,'utf8')); } catch(_){ return []; } } +function loadWebhookSubs() { try { return JSON.parse(fs.readFileSync(WEBHOOK_SUBS_FILE,'utf8')); } catch(_){ return []; } } +function saveWebhookSubs(s) { try { fs.writeFileSync(WEBHOOK_SUBS_FILE, JSON.stringify(s, null, 2)); } catch(_){} } +function saveHijackAlerts(a) { try { fs.writeFileSync(HIJACK_ALERTS_FILE, JSON.stringify(a.slice(-1000), null, 2)); } catch(_){} } +function saveHijackSubs(s) { try { fs.writeFileSync(HIJACK_SUBS_FILE, JSON.stringify(s, null, 2)); } catch(_){} } + +// Generate HMAC-SHA256 signature for webhook payloads +function webhookSignature(secret, payload) { + return 'sha256=' + crypto.createHmac('sha256', secret).update(payload).digest('hex'); +} + +// Classify hijack severity +function classifyHijackSeverity(unexpected, missing, rpkiInvalid) { + if (rpkiInvalid > 0 || unexpected.length >= 5) return 'CRITICAL'; + if (unexpected.length >= 2 || missing.length >= 3) return 'HIGH'; + if (unexpected.length >= 1 || missing.length >= 1) return 'MEDIUM'; + return 'LOW'; +} + +// Deliver webhook with exponential backoff (max 5 retries) +async function deliverWebhook(sub, payload, attempt) { + attempt = attempt || 1; + const payloadStr = JSON.stringify(payload); + const sig = webhookSignature(sub.secret, payloadStr); + return new Promise((resolve) => { + try { + const parsed = new URL(sub.endpoint_url); + const lib = parsed.protocol === 'https:' ? https : http; + const options = { + hostname: parsed.hostname, + port: parsed.port || (parsed.protocol === 'https:' ? 443 : 80), + path: parsed.pathname + parsed.search, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(payloadStr), + 'X-PeerCortex-Signature': sig, + 'X-PeerCortex-Event': 'hijack_detected', + 'User-Agent': 'PeerCortex-Webhook/1.0' + }, + timeout: 10000 + }; + const req = lib.request(options, (res) => { + let body = ''; + res.on('data', c => body += c); + res.on('end', () => { + if (res.statusCode >= 200 && res.statusCode < 300) { + resolve({ ok: true, status: res.statusCode }); + } else if (attempt < 5) { + const delay = Math.pow(2, attempt) * 1000; + setTimeout(() => deliverWebhook(sub, payload, attempt + 1).then(resolve), delay); + } else { + resolve({ ok: false, status: res.statusCode, error: 'max_retries' }); + } + }); + }); + req.on('error', () => { + if (attempt < 5) { + const delay = Math.pow(2, attempt) * 1000; + setTimeout(() => deliverWebhook(sub, payload, attempt + 1).then(resolve), delay); + } else { + resolve({ ok: false, error: 'connection_failed' }); + } + }); + req.on('timeout', () => { req.destroy(); }); + req.write(payloadStr); + req.end(); + } catch(e) { + resolve({ ok: false, error: e.message }); + } + }); +} + +// Fire webhooks for all subscribers of an ASN when hijack detected +async function notifyWebhooks(asn, alert) { + const subs = loadWebhookSubs().filter(s => String(s.asn) === String(asn) && s.active !== false); + for (const sub of subs) { + const payload = { + event: 'hijack_detected', + asn: asn, + alert: alert, + timestamp: new Date().toISOString(), + source: 'PeerCortex BGP Monitor' + }; + deliverWebhook(sub, payload, 1).then(result => { + if (!result.ok) console.warn(`[WEBHOOK] Delivery failed for AS${asn} → ${sub.endpoint_url}: ${result.error || result.status}`); + }); + } +} async function checkHijacksForAsn(asn) { try { - const url = `https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS${asn}&${UA}`; - const data = await fetchJSON(url, { timeout: 6000 }); + const url = `https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS${asn}`; + const data = await fetchJSON(url, { timeout: 8000 }); const prefixes = (data && data.data && data.data.prefixes || []).map(p => p.prefix); return prefixes; } catch (_) { return []; } @@ -379,31 +518,416 @@ async function runHijackCheck() { const subs = loadHijackSubs(); if (!subs.length) return; const alerts = loadHijackAlerts(); + let changed = false; for (const sub of subs) { const current = await checkHijacksForAsn(sub.asn); const baseline = new Set(sub.prefixes || []); const unexpected = current.filter(p => baseline.size > 0 && !baseline.has(p)); const missing = [...baseline].filter(p => !current.includes(p)); if (unexpected.length || missing.length) { - const alert = { - asn: sub.asn, ts: new Date().toISOString(), - unexpected, missing, - msg: `Possible hijack detected for AS${sub.asn}: ${unexpected.length} unexpected, ${missing.length} missing prefixes` - }; - alerts.push(alert); - try { fs.writeFileSync(HIJACK_ALERTS_FILE, JSON.stringify(alerts.slice(-500), null, 2)); } catch(_) {} + // Dedup: only alert if no alert in last 6 hours for this ASN + const sixHoursAgo = Date.now() - 6 * 60 * 60 * 1000; + const recentAlert = alerts.find(a => a.asn === sub.asn && new Date(a.ts).getTime() > sixHoursAgo); + if (!recentAlert) { + const severity = classifyHijackSeverity(unexpected, missing, 0); + const alert = { + id: crypto.randomBytes(8).toString('hex'), + asn: sub.asn, ts: new Date().toISOString(), + severity, unexpected, missing, resolved: false, + msg: `BGP anomaly for AS${sub.asn}: ${unexpected.length} unexpected prefix(es), ${missing.length} missing` + }; + alerts.push(alert); + changed = true; + notifyWebhooks(sub.asn, alert); + } } - // Update baseline with current prefixes if no baseline set + // Set baseline on first monitoring if (!sub.prefixes || !sub.prefixes.length) { sub.prefixes = current; - try { fs.writeFileSync(HIJACK_SUBS_FILE, JSON.stringify(subs, null, 2)); } catch(_) {} + changed = true; } } + if (changed) { saveHijackAlerts(alerts); saveHijackSubs(subs); } } // Run hijack check every 30 minutes setInterval(runHijackCheck, 30 * 60 * 1000); +// ============================================================ +// FEATURE 3: ASPA Adoption Tracker +// ============================================================ +/** + * Load persisted ASPA adoption history from disk. + * Returns array of snapshot objects (up to 365 entries). + */ +function loadAspaAdoptionHistory() { + try { + const raw = JSON.parse(fs.readFileSync(ASPA_ADOPTION_FILE, 'utf8')); + return Array.isArray(raw) ? raw : []; + } catch(_) { return []; } +} + +/** + * Save ASPA adoption history to disk (keep last 365 entries). + */ +function saveAspaAdoptionHistory(history) { + try { + const trimmed = history.slice(-365); + fs.writeFileSync(ASPA_ADOPTION_FILE, JSON.stringify(trimmed, null, 2), 'utf8'); + } catch(e) { + console.error('[ASPA-ADOPT] Save failed:', e.message); + } +} + +/** In-memory adoption history (persisted on each new snapshot) */ +let aspaAdoptionDailyHistory = loadAspaAdoptionHistory(); + +/** + * Take a new adoption snapshot and persist it. + * Called whenever the RPKI feed is refreshed. + * @param {number} aspaCount — total ASPA objects in rpkiAspaMap + * @param {number} roaCount — total ROAs in roaStore + */ +function recordAspaAdoptionSnapshot(aspaCount, roaCount) { + const now = new Date(); + const date = now.toISOString().slice(0, 10); // "YYYY-MM-DD" + + // Compute how many Atlas-visible ASNs have ASPA + let atlasTotal = 0; + let atlasWithAspa = 0; + if (typeof atlasProbeCache !== 'undefined' && atlasProbeCache?.asns_with_probes) { + atlasTotal = atlasProbeCache.asns_with_probes.length; + // rpkiAspaMap is keyed by integer ASN + atlasWithAspa = atlasProbeCache.asns_with_probes.filter(a => rpkiAspaMap.has(Number(a))).length; + } + + const coveragePct = atlasTotal > 0 + ? Math.round((atlasWithAspa / atlasTotal) * 10000) / 100 // 2 decimal places + : 0; + + // Compute delta from previous snapshot + const prev = aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 1]; + const delta = prev ? aspaCount - prev.aspa_objects : 0; + + const snapshot = { + date, + ts: now.getTime(), + aspa_objects: aspaCount, + roa_count: roaCount, + atlas_asns_total: atlasTotal, + atlas_asns_with_aspa: atlasWithAspa, + coverage_pct_atlas: coveragePct, + aspa_delta: delta, + method: 'rpki_cloudflare_feed', + }; + + // Only store one snapshot per date (overwrite if same day) + const existingIdx = aspaAdoptionDailyHistory.findIndex(s => s.date === date); + if (existingIdx >= 0) { + aspaAdoptionDailyHistory[existingIdx] = snapshot; + } else { + aspaAdoptionDailyHistory.push(snapshot); + } + saveAspaAdoptionHistory(aspaAdoptionDailyHistory); + console.log(`[ASPA-ADOPT] Snapshot ${date}: ${aspaCount} objects, ${coveragePct}% Atlas coverage (${atlasWithAspa}/${atlasTotal})`); + return snapshot; +} + +/** + * Get adoption trend for a given period string ('7d', '30d', '90d', '1y'). + */ +function getAdoptionTrend(period) { + const days = period === '7d' ? 7 : period === '30d' ? 30 : period === '90d' ? 90 : 365; + const cutoff = Date.now() - days * 24 * 60 * 60 * 1000; + return aspaAdoptionDailyHistory.filter(s => s.ts >= cutoff); +} + +/** + * Build the ASPA adoption dashboard HTML. + */ +function buildAspaAdoptionDashboard() { + const latest = aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 1]; + const trend30 = getAdoptionTrend('30d'); + const trend7 = getAdoptionTrend('7d'); + + // Forecast: simple linear regression over last 30 days + function linearForecast(data, daysAhead) { + if (data.length < 2) return null; + const n = data.length; + const xs = data.map((_, i) => i); + const ys = data.map(d => d.coverage_pct_atlas); + const xMean = xs.reduce((a, b) => a + b, 0) / n; + const yMean = ys.reduce((a, b) => a + b, 0) / n; + const num = xs.reduce((s, x, i) => s + (x - xMean) * (ys[i] - yMean), 0); + const den = xs.reduce((s, x) => s + (x - xMean) ** 2, 0); + if (den === 0) return yMean; + const slope = num / den; + return Math.max(0, Math.min(100, yMean + slope * (n - 1 + daysAhead))); + } + + const forecast90d = linearForecast(trend30, 90); + const change7d = trend7.length >= 2 + ? (trend7[trend7.length-1].aspa_objects - trend7[0].aspa_objects) + : 0; + const trendLabels = trend30.map(d => d.date); + const trendValues = trend30.map(d => d.coverage_pct_atlas); + const asnValues = trend30.map(d => d.aspa_objects); + + const coverageNow = latest?.coverage_pct_atlas ?? 0; + const aspaNow = latest?.aspa_objects ?? 0; + const atlasTotal = latest?.atlas_asns_total ?? 0; + + return ` + + + + + ASPA Adoption Tracker · PeerCortex + + + + + +
+

ASPA Adoption Tracker

+

Global ASPA deployment trends · Powered by RPKI Cloudflare feed · Updated every ~4 hours

+ +
+
+
Atlas Coverage
+
${coverageNow.toFixed(1)}%
+
of Atlas-visible ASNs
+
+
+
ASPA Objects
+
${aspaNow.toLocaleString()}
+
total in RPKI
+
+
+
Atlas ASNs
+
${atlasTotal.toLocaleString()}
+
sampled denominator
+
+
+
7-Day Delta
+
${change7d > 0 ? '+' : ''}${change7d}
+
new ASPA objects
+
+
+
Data Points
+
${aspaAdoptionDailyHistory.length}
+
history snapshots
+
+
+ + + +
+
+

Atlas Coverage % (last 30 days)

+ +
+
+
90-Day Forecast
+
${forecast90d !== null ? forecast90d.toFixed(1) + '%' : '—'}
+
linear projection from 30-day trend
+
+ Based on ${trend30.length} data points.
+ Current: ${coverageNow.toFixed(1)}% +
+
+
+ +
+

Total ASPA Objects in RPKI (last 30 days)

+ +
+ +
+ Last snapshot: ${latest?.date ?? 'none'} · Denominator: ${atlasTotal.toLocaleString()} Atlas ASNs · + JSON API +
+
+ + + +`; +} + +// ============================================================ +// FEATURE 4: IPv6 Adoption per RIR +// ============================================================ + +// In-memory cache: { data, ts } +let ipv6StatsCache = null; +const IPV6_STATS_TTL = 24 * 60 * 60 * 1000; // 24h + +const RIR_DELEGATION_URLS = { + RIPE: 'https://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest', + ARIN: 'https://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest', + APNIC: 'https://ftp.apnic.net/stats/apnic/delegated-apnic-extended-latest', + AFRINIC: 'https://ftp.afrinic.net/stats/afrinic/delegated-afrinic-extended-latest', + LACNIC: 'https://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest', +}; + +/** + * Fetch and parse one RIR delegation file. + * Returns { ipv4, ipv6, asns } count objects. + */ +function fetchRirDelegation(rir, url) { + return new Promise((resolve) => { + const result = { rir, ipv4: 0, ipv6: 0, asns: 0, ipv4_countries: new Set(), ipv6_countries: new Set() }; + const mod = url.startsWith('https') ? require('https') : require('http'); + const req = mod.get(url, { headers: { 'User-Agent': 'PeerCortex/1.0 (+https://peercortex.org)' }, timeout: 20000 }, res => { + if (res.statusCode !== 200) { resolve(result); return; } + let buf = ''; + res.on('data', d => { buf += d; }); + res.on('end', () => { + for (const line of buf.split('\n')) { + if (line.startsWith('#') || line.startsWith(rir.toLowerCase() + '|*') || !line.includes('|')) continue; + const parts = line.split('|'); + if (parts.length < 7) continue; + const type = parts[2]; + const status = parts[6].trim(); + const cc = parts[1]; + if (status !== 'allocated' && status !== 'assigned') continue; + if (type === 'ipv4') { result.ipv4++; result.ipv4_countries.add(cc); } + else if (type === 'ipv6') { result.ipv6++; result.ipv6_countries.add(cc); } + else if (type === 'asn') { result.asns++; } + } + resolve(result); + }); + }); + req.on('error', () => resolve(result)); + req.on('timeout', () => { req.destroy(); resolve(result); }); + }); +} + +/** + * Fetch all 5 RIR delegation files and aggregate IPv6 stats. + * Cached for 24 hours. + */ +async function fetchIpv6AdoptionStats(force) { + if (!force && ipv6StatsCache && (Date.now() - ipv6StatsCache.ts) < IPV6_STATS_TTL) { + return ipv6StatsCache.data; + } + console.log('[IPv6] Fetching RIR delegation stats...'); + const results = await Promise.all( + Object.entries(RIR_DELEGATION_URLS).map(([rir, url]) => fetchRirDelegation(rir, url)) + ); + const rirs = results.map(r => ({ + rir: r.rir, + ipv4_records: r.ipv4, + ipv6_records: r.ipv6, + asn_records: r.asns, + ipv6_pct: (r.ipv4 + r.ipv6) > 0 + ? Math.round((r.ipv6 / (r.ipv4 + r.ipv6)) * 10000) / 100 + : 0, + countries_with_ipv6: r.ipv6_countries.size, + countries_with_ipv4: r.ipv4_countries.size, + })); + const total_ipv4 = rirs.reduce((s, r) => s + r.ipv4_records, 0); + const total_ipv6 = rirs.reduce((s, r) => s + r.ipv6_records, 0); + const data = { + fetched_at: new Date().toISOString(), + global_ipv6_pct: total_ipv4 + total_ipv6 > 0 + ? Math.round((total_ipv6 / (total_ipv4 + total_ipv6)) * 10000) / 100 + : 0, + total_ipv4_records: total_ipv4, + total_ipv6_records: total_ipv6, + by_rir: rirs, + }; + ipv6StatsCache = { data, ts: Date.now() }; + console.log(`[IPv6] Done. Global IPv6%: ${data.global_ipv6_pct}% across ${rirs.length} RIRs`); + return data; +} + +// Pre-fetch on startup (non-blocking) +fetchIpv6AdoptionStats().catch(() => {}); const UA = "PeerCortex/0.5.0 (+https://peercortex.org)"; @@ -432,6 +956,686 @@ const CITY_COORDS = { "scotland": [55.9533, -3.1883], "edinburgh": [55.9533, -3.1883], }; +// ============================================================ +// FEATURE 2: PDF Export — template generators + puppeteer renderer +// ============================================================ + +/** + * Generate a health score ring SVG (inline, no external deps) + * @param {number} score 0–100 + * @param {string} color CSS color + */ +function scoreRingSvg(score, color) { + const r = 54, cx = 64, cy = 64; + const circ = 2 * Math.PI * r; + const fill = circ * (1 - score / 100); + const clr = color || (score >= 80 ? '#22c55e' : score >= 60 ? '#f59e0b' : '#ef4444'); + return ` + + + ${score} + /100 + `; +} + +/** Shared CSS for all PDF templates */ +function pdfBaseCSS() { + return ` + *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + body { font-family: -apple-system, 'Segoe UI', system-ui, Arial, sans-serif; color: #1e1b4b; background: #fff; font-size: 11pt; line-height: 1.5; } + @page { size: A4; margin: 18mm 16mm; } + .page { page-break-after: always; min-height: 247mm; padding: 0; } + .page:last-child { page-break-after: avoid; } + h1 { font-size: 22pt; font-weight: 700; color: #4f46e5; } + h2 { font-size: 14pt; font-weight: 600; color: #3730a3; margin-top: 1.4em; margin-bottom: 0.5em; border-bottom: 2px solid #e0e7ff; padding-bottom: 4px; } + h3 { font-size: 11pt; font-weight: 600; color: #4338ca; margin-top: 1em; margin-bottom: 0.3em; } + p { margin-bottom: 0.5em; } + table { width: 100%; border-collapse: collapse; margin: 0.6em 0; font-size: 9.5pt; } + th { background: #4f46e5; color: #fff; padding: 6px 10px; text-align: left; font-weight: 600; } + td { padding: 5px 10px; border-bottom: 1px solid #e0e7ff; vertical-align: top; } + tr:nth-child(even) td { background: #f5f3ff; } + .badge { display: inline-block; padding: 2px 8px; border-radius: 999px; font-size: 8.5pt; font-weight: 600; } + .badge-green { background: #dcfce7; color: #166534; } + .badge-red { background: #fee2e2; color: #991b1b; } + .badge-yellow{ background: #fef9c3; color: #854d0e; } + .badge-gray { background: #f3f4f6; color: #374151; } + .badge-indigo{ background: #e0e7ff; color: #3730a3; } + .cover { display: flex; flex-direction: column; justify-content: center; align-items: flex-start; padding: 40px 0 20px; min-height: 247mm; } + .cover-logo { font-size: 11pt; font-weight: 700; color: #4f46e5; letter-spacing: -0.5px; margin-bottom: 60px; display: flex; align-items: center; gap: 8px; } + .cover-logo span { color: #1e1b4b; } + .cover-asn { font-size: 11pt; font-weight: 500; color: #6b7280; margin-bottom: 6px; } + .cover-name { font-size: 28pt; font-weight: 700; color: #1e1b4b; margin-bottom: 8px; line-height: 1.2; } + .cover-sub { font-size: 13pt; color: #4f46e5; font-weight: 500; margin-bottom: 30px; } + .cover-meta { font-size: 9pt; color: #9ca3af; margin-top: auto; padding-top: 20px; border-top: 1px solid #e0e7ff; width: 100%; } + .cover-stripe { position: fixed; right: -8mm; top: 0; width: 28mm; height: 100vh; background: linear-gradient(180deg, #4f46e5 0%, #6366f1 50%, #818cf8 100%); opacity: 0.08; pointer-events: none; } + .metric-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin: 1em 0; } + .metric-card { background: #f5f3ff; border: 1px solid #e0e7ff; border-radius: 8px; padding: 12px 14px; } + .metric-card .label { font-size: 8pt; color: #6b7280; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; } + .metric-card .value { font-size: 18pt; font-weight: 700; color: #4f46e5; } + .metric-card .unit { font-size: 8pt; color: #9ca3af; } + .score-row { display: flex; align-items: center; gap: 20px; margin: 0.8em 0; } + .check-list { list-style: none; padding: 0; } + .check-list li { display: flex; align-items: flex-start; gap: 8px; padding: 5px 0; border-bottom: 1px solid #f3f4f6; font-size: 9.5pt; } + .check-icon { width: 16px; height: 16px; flex-shrink: 0; margin-top: 2px; } + .check-pass { color: #16a34a; } + .check-fail { color: #dc2626; } + .check-warn { color: #d97706; } + .section-intro { font-size: 9.5pt; color: #6b7280; margin-bottom: 1em; font-style: italic; } + footer { position: fixed; bottom: 0; left: 0; right: 0; font-size: 8pt; color: #9ca3af; padding: 6px 16mm; border-top: 1px solid #e0e7ff; display: flex; justify-content: space-between; } + `; +} + +/** + * Build the PDF HTML for a single ASN. + * @param {object} data Full /api/validate response + * @param {object} aspa /api/aspa response (may be null) + * @param {string} format 'report' | 'executive' | 'technical' + */ +function buildPdfHtml(data, aspa, format) { + const asn = data.asn || '?'; + const name = data.name || 'Unknown Network'; + const score = Math.round(data.health_score || 0); + const ts = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); + const checks = (data.score_breakdown || []); + const rel = data.relationships || {}; + const counts = rel.counts || {}; + // validations is an object keyed by check name; rpki details live in rpki_completeness + const validations = (data.validations && typeof data.validations === 'object' && !Array.isArray(data.validations)) ? data.validations : {}; + const rpkiDetails = (validations.rpki_completeness?.details || []); + const totalPfx = data.meta?.total_prefixes || 0; + + // Derived stats — use rpki_completeness for RPKI metrics + const rpki = validations.rpki_completeness || {}; + const rpkiCoverage = rpki.coverage_pct ?? 0; + const rpkiTotal = rpki.total_checked || rpkiDetails.length || 0; + const rpkiValid = rpki.with_roa || rpkiDetails.filter(v => v.status === 'valid').length; + const rpkiInvalid = rpkiDetails.filter(v => v.status === 'invalid').length; + const rpkiNotFound = rpkiDetails.filter(v => v.status === 'not-found' || v.status === 'unknown').length; + + const passedChecks = checks.filter(c => c.status === 'pass').length; + const failedChecks = checks.filter(c => c.status !== 'pass' && c.status !== 'info').length; + const scoreColor = score >= 80 ? '#16a34a' : score >= 60 ? '#d97706' : '#dc2626'; + const aspaDirect = aspa?.direct?.has_aspa ?? null; + const aspaProviders= aspa?.direct?.provider_asns?.length || 0; + + // Check list HTML + function checkIcon(passed) { + if (passed) return ''; + return ''; + } + + const checksHtml = checks.map(c => { + const isPassed = c.status === 'pass'; + const isInfo = c.status === 'info'; + const icon = checkIcon(isPassed || isInfo); + const statusBadge = isPassed ? 'badge-green' : isInfo ? 'badge-indigo' : 'badge-red'; + const statusLabel = isPassed ? 'PASS' : isInfo ? 'INFO' : 'FAIL'; + return ` +
  • + ${icon} +
    + ${escHtml(c.check || '')} + ${statusLabel} + ${c.earned !== undefined ? `${c.earned}/${c.weight}pt` : ''} +
    +
  • `; + }).join(''); + + // Upstream providers table + const upstreamRows = (rel.upstreams || []).slice(0, 10).map(u => ` + AS${u.asn}${escHtml(u.name || '')}${u.power ?? '-'} + `).join(''); + + // Prefix validations table (sample from rpki_completeness.details) + const pfxRows = rpkiDetails.slice(0, 20).map(v => { + const badge = v.status === 'valid' ? 'badge-green' : v.status === 'invalid' ? 'badge-red' : 'badge-gray'; + return `${escHtml(v.prefix)} + ${v.status} + ${v.validating_roas ?? '-'} + —`; + }).join(''); + + // Recommendations + const failedItems = checks.filter(c => c.status !== 'pass' && c.status !== 'info'); + const recHtml = failedItems.length === 0 + ? '

    ✓ No critical issues found. Network health is excellent.

    ' + : failedItems.map((c, i) => ` +
    +
    ${i+1}. ${escHtml(c.check || '')}
    + ${c.detail ? `
    ${escHtml(c.detail)}
    ` : ''} +
    `).join(''); + + // ── Executive pages (always present) ─────────────────────────────────────── + const coverPage = ` +
    +
    + +
    AS${asn}
    +
    ${escHtml(name)}
    +
    ${formatLabel(format)} Report
    +
    + ${scoreRingSvg(score)} +
    +
    Health Score
    +
    ${score}/100
    +
    ${passedChecks} passed · ${failedChecks} failed
    +
    +
    +
    + Generated by PeerCortex · ${ts} · peercortex.org +   |   ${totalPfx} prefixes analysed +   |   RPKI coverage ${rpkiCoverage}% +
    +
    `; + + const summaryPage = ` +
    +

    Executive Summary

    +

    Key performance indicators for AS${asn} (${escHtml(name)}).

    +
    +
    Health Score
    ${score}
    out of 100
    +
    RPKI Coverage
    ${rpkiCoverage}%
    ${rpkiValid}/${rpkiTotal} prefixes
    +
    Upstreams
    ${counts.upstreams || 0}
    providers
    +
    Downstreams
    ${counts.downstreams || 0}
    customers
    +
    Peers
    ${counts.peers || 0}
    BGP sessions
    +
    ASPA Status
    +
    + + ${aspaDirect === true ? 'Deployed' : aspaDirect === false ? 'Not Deployed' : 'Unknown'} + +
    +
    ${aspaProviders} providers
    +
    +
    +

    Status Overview

    +
      ${checksHtml}
    +
    `; + + // ── Recommendations page ──────────────────────────────────────────────────── + const recsPage = ` +
    +

    Recommendations

    +

    Action items to improve network health and security posture.

    + ${recHtml} + ${failedItems.length > 0 ? ` +

    Remediation Priority

    + + + ${failedItems.map((c, i) => ` + + + + + + `).join('')} +
    #CheckImpactEffort
    ${i+1}${escHtml(c.check || '')}HighMedium
    ` : ''} +
    `; + + // ── Detail pages (included for 'report' and 'technical') ─────────────────── + const rpkiPage = ` +
    +

    RPKI Compliance

    +

    Route Origin Authorization (ROA) validation results for announced prefixes.

    +
    +
    Coverage
    ${rpkiCoverage}%
    ${rpkiValid} valid ROAs
    +
    Invalid
    ${rpkiInvalid}
    prefix${rpkiInvalid !== 1 ? 'es' : ''}
    +
    Not Found
    ${rpkiNotFound}
    no ROA
    +
    +

    ASPA (Autonomous System Provider Authorization)

    + + + + + +
    AttributeValue
    ASPA Object Present${aspaDirect ? 'Yes' : 'No'}
    Provider Count${aspaProviders}
    Providers${(aspa?.direct?.provider_asns || []).slice(0, 8).map(a => `AS${a}`).join(', ') || '—'}
    + ${pfxRows ? ` +

    Prefix Validation Sample (first 20)

    + + + ${pfxRows} +
    PrefixStatusMax LengthROA Origin
    ` : ''} +
    `; + + const bgpPage = ` +
    +

    BGP Topology

    +

    AS relationship overview and upstream connectivity analysis.

    +
    +
    Upstreams
    ${counts.upstreams || 0}
    transit providers
    +
    Downstreams
    ${counts.downstreams || 0}
    customers
    +
    Peers
    ${counts.peers || 0}
    BGP peers
    +
    + ${upstreamRows ? ` +

    Top Upstream Providers

    + + + ${upstreamRows} +
    ASNNamePower Score
    ` : '

    No upstream data available.

    '} +
    `; + + const footer = ` +
    + PeerCortex · AS${asn} · ${escHtml(name)} + Generated ${ts} · peercortex.org +
    `; + + // ── Extra pages for technical / report formats ───────────────────────────── + + // Technical: full prefix table (no row cap) + all upstream rows + check scores + const allPfxRows = rpkiDetails.map(v => { + const badge = v.status === 'valid' ? 'badge-green' : v.status === 'invalid' ? 'badge-red' : 'badge-gray'; + return `${escHtml(v.prefix)} + ${v.status} + ${v.validating_roas ?? '-'} + ${v.max_length ?? '-'}`; + }).join(''); + + const allUpstreamRows = (rel.upstreams || []).map(u => + `AS${u.asn}${escHtml(u.name || '')}${u.power ?? '-'}` + ).join(''); + + const checkScoreRows = checks.map(c => + ` + ${escHtml(c.check || '')} + ${c.status?.toUpperCase()} + ${c.earned ?? '-'}${c.weight ?? '-'} + ${escHtml(c.detail || '')} + ` + ).join(''); + + const technicalHeaderPage = ` +
    +
    +
    PeerCortex · Technical Analysis Report
    +
    AS${asn} — ${escHtml(name)}
    +
    Generated ${ts} · peercortex.org · ${totalPfx} prefixes · RPKI ${rpkiCoverage}%
    +
    +
    +
    Health Score
    ${score}/100
    ${passedChecks} pass · ${failedChecks} fail
    +
    RPKI Coverage
    ${rpkiCoverage}%
    ${rpkiValid} valid · ${rpkiInvalid} invalid · ${rpkiNotFound} missing
    +
    Upstreams
    ${counts.upstreams || 0}
    transit providers
    +
    Peers / Downstreams
    ${counts.peers || 0} / ${counts.downstreams || 0}
    BGP relationships
    +
    ASPA
    +
    ${aspaDirect === true ? 'Deployed' : 'Not deployed'}
    +
    ${aspaProviders} providers registered
    +
    +
    Prefixes Analysed
    ${totalPfx}
    ${rpkiDetails.length} with RPKI data
    +
    +
    `; + + const rpkiFullPage = ` +
    +

    RPKI Compliance — Full Prefix Table

    +

    ${rpkiDetails.length} prefixes with RPKI validation data. Coverage: ${rpkiCoverage}% · Valid: ${rpkiValid} · Invalid: ${rpkiInvalid} · Not Found: ${rpkiNotFound}

    +

    ASPA Object

    + + + + + +
    AttributeValue
    ASPA Present${aspaDirect ? 'Yes' : 'No'}
    Provider Count${aspaProviders}
    Registered Providers${(aspa?.direct?.provider_asns || []).map(a => `AS${a}`).join(', ') || '—'}
    + ${allPfxRows ? ` +

    All Prefixes

    + + + ${allPfxRows} +
    PrefixRPKI StatusValidating ROAsMax Length
    ` : '

    No RPKI prefix data available.

    '} +
    `; + + const bgpFullPage = ` +
    +

    BGP Topology — Full Relationship Table

    +

    Complete AS relationship data. Upstreams: ${counts.upstreams || 0} · Peers: ${counts.peers || 0} · Downstreams: ${counts.downstreams || 0}

    + ${allUpstreamRows ? ` +

    All Upstream Providers

    + + + ${allUpstreamRows} +
    ASNNamePower Score
    ` : '

    No upstream data available.

    '} + ${(rel.peers || []).length > 0 ? ` +

    Peer Sample (top 20)

    + + + ${(rel.peers || []).slice(0, 20).map(p => ``).join('')} +
    ASNName
    AS${p.asn}${escHtml(p.name || '')}
    ` : ''} +
    `; + + const checkDetailPage = ` +
    +

    Check Score Detail

    +

    All ${checks.length} health checks with individual scores and diagnostic notes.

    + + + ${checkScoreRows} +
    CheckStatusEarnedWeightDetail
    +
    + Scoring: Total = sum of earned points across all checks. Maximum possible: ${checks.reduce((s, c) => s + (c.weight || 0), 0)} points. + Current score: ${checks.reduce((s, c) => s + (c.earned || 0), 0)} / ${checks.reduce((s, c) => s + (c.weight || 0), 0)} = ${score}/100 +
    +
    `; + + // Report: add data provenance and ASPA deep-dive + const aspaPage = ` +
    +

    ASPA — Provider Authorization Analysis

    +

    Autonomous System Provider Authorization (ASPA) is a BGP security mechanism that cryptographically links an ASN to its upstream providers in the RPKI.

    +
    +
    ASPA Deployed
    +
    ${aspaDirect === true ? 'Yes' : 'No'}
    +
    +
    Providers Listed
    ${aspaProviders}
    in ASPA object
    +
    RPKI Coverage
    ${rpkiCoverage}%
    of announced prefixes
    +
    +

    What ASPA Protects Against

    + + + + + + +
    ThreatASPA Mitigates?Notes
    Route leaks (valley-free violations)YesProviders verify upstream path
    BGP hijacks (origin AS spoofing)PartialCombined with ROV
    AS-path prepending attacksYesInvalid paths rejected
    Forged-origin hijacksNoROA + ROV required
    + ${aspaDirect === false ? ` +
    +
    Recommendation: Deploy ASPA
    +
    + 1. Identify all upstream transit providers (${counts.upstreams || 0} detected)
    + 2. Create an ASPA object in your RIR portal listing their ASNs
    + 3. Sign with your RPKI key — takes effect within hours
    + 4. Verify with: rpki-client -v or RIPE RPKI Validator +
    +
    ` : ` +
    +
    ASPA is deployed — listed providers:
    +
    ${(aspa?.direct?.provider_asns || []).map(a => `AS${a}`).join(' · ') || '—'}
    +
    `} +
    `; + + const provenancePage = ` +
    +

    Data Provenance

    +

    All data sources, cache ages, and methodology used to generate this report.

    + + + + + + + + +
    Data SourceWhat it providesUpdate Frequency
    Cloudflare RPKI FeedROA + ASPA objectsEvery 4 hours
    PeeringDBIXP presence, peering policy, facilitiesDaily (03:00 UTC)
    RIPE StatAS relationships, prefix visibility, BGP dataReal-time / cached 15 min
    RIPE AtlasActive measurement probes by ASNCached 12 hours
    bgproutes.ioBGP route visibility fallbackReal-time
    bgp.he.netAS relationship graphCached 24 hours
    +

    Report Metadata

    + + + + + + + + + + +
    FieldValue
    ASNAS${asn}
    Network Name${escHtml(name)}
    Report Format${formatLabel(format)}
    Generated${ts}
    PlatformPeerCortex · peercortex.org
    Prefixes Analysed${totalPfx}
    RPKI Objects Checked${rpkiDetails.length}
    Health Checks Run${checks.length}
    +
    + This report is generated automatically based on publicly available BGP and RPKI data. + Data may be delayed by cache TTLs. Not a substitute for real-time monitoring. + MIT License · github.com/renefichtmueller/PeerCortex +
    +
    `; + + // ── Compose pages by format ──────────────────────────────────────────────── + let bodyContent; + if (format === 'executive') { + // 3 pages: clean stakeholder summary — no deep technical data + bodyContent = coverPage + summaryPage + recsPage; + } else if (format === 'technical') { + // ~8 pages: engineer-focused, dense, no decorative cover, full data tables + bodyContent = technicalHeaderPage + rpkiFullPage + bgpFullPage + checkDetailPage + recsPage; + } else { + // 'report' — full stakeholder + technical, ~10 pages + bodyContent = coverPage + summaryPage + rpkiPage + bgpPage + aspaPage + recsPage + provenancePage; + } + + return ` + + + + PeerCortex — AS${asn} ${formatLabel(format)} + + + + ${bodyContent} + ${footer} + +`; +} + +/** + * Build comparison PDF HTML for two ASNs. + */ +function buildComparisonPdfHtml(d1, aspa1, l1, d2, aspa2, l2) { + const ts = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); + + function col(d, aspa) { + const asn = d.asn || '?'; + const name = d.name || 'Unknown'; + const score = Math.round(d.health_score || 0); + const rel = d.relationships || {}; + const counts= rel.counts || {}; + const vals = (d.validations && !Array.isArray(d.validations)) ? d.validations : {}; + const rpki = vals.rpki_completeness || {}; + const rpkiV = rpki.with_roa || 0; + const rpkiT = rpki.total_checked || 0; + const rpkiC = rpki.coverage_pct ?? (rpkiT > 0 ? Math.round((rpkiV / rpkiT) * 100) : 0); + const sc = score >= 80 ? '#16a34a' : score >= 60 ? '#d97706' : '#dc2626'; + const aspaDep = aspa?.direct?.has_aspa ?? null; + const checks= (d.score_breakdown || []); + const passC = checks.filter(c => c.status === 'pass').length; + const failC = checks.filter(c => c.status !== 'pass' && c.status !== 'info').length; + + return ` + +
    + ${scoreRingSvg(score, sc)} +
    AS${asn}
    +
    ${escHtml(name)}
    +
    + + + + + + + + + + + +
    Key Metrics
    Health Score${score}/100
    RPKI Coverage${rpkiC}% (${rpkiV}/${rpkiT})
    Upstreams${counts.upstreams || 0}
    Downstreams${counts.downstreams || 0}
    Peers${counts.peers || 0}
    ASPA${aspaDep ? 'Deployed' : 'Not Deployed'}
    Checks Passed${passC} / ${checks.length}
    Checks Failed${failC}
    Total Prefixes${d.meta?.total_prefixes || 0}
    + `; + } + + const colHtml = col(d1, aspa1) + col(d2, aspa2); + + // ── Peering Intelligence: common IXPs + common facilities ───────────────── + const ixList1 = (l1?.ix_presence?.connections || []).map(x => ({ id: x.ix_id, name: x.ix_name, city: x.city || '', speed: x.speed_mbps })); + const ixList2 = (l2?.ix_presence?.connections || []).map(x => ({ id: x.ix_id, name: x.ix_name, city: x.city || '', speed: x.speed_mbps })); + const ixIds1 = new Set(ixList1.map(x => x.id)); + const ixIds2 = new Set(ixList2.map(x => x.id)); + const commonIxIds = [...ixIds1].filter(id => ixIds2.has(id)); + const commonIxps = commonIxIds.slice(0, 20).map(id => { + const x1 = ixList1.find(x => x.id === id); + const x2 = ixList2.find(x => x.id === id); + return { id, name: x1?.name || 'Unknown', city: x1?.city || '', speed1: x1?.speed, speed2: x2?.speed }; + }); + + const facList1 = (l1?.facilities?.list || []).map(f => ({ id: f.fac_id, name: f.name, city: f.city || '', country: f.country || '' })); + const facList2 = (l2?.facilities?.list || []).map(f => ({ id: f.fac_id, name: f.name, city: f.city || '', country: f.country || '' })); + const facIds1 = new Set(facList1.map(f => f.id)); + const facIds2 = new Set(facList2.map(f => f.id)); + const commonFacIds = [...facIds1].filter(id => facIds2.has(id)); + const commonFacs = commonFacIds.slice(0, 15).map(id => facList1.find(f => f.id === id)); + + // IXPs of ASN1 where ASN2 is NOT present (opportunity IXPs for ASN2) + const oppsFor2 = ixList1.filter(x => !ixIds2.has(x.id)).slice(0, 8); + const oppsFor1 = ixList2.filter(x => !ixIds1.has(x.id)).slice(0, 8); + + const commonIxHtml = commonIxps.length > 0 + ? ` + + ${commonIxps.map(x => ` + + + + + + `).join('')} +
    IXP NameCityAS${d1.asn} SpeedAS${d2.asn} Speed
    ${escHtml(x.name)}${escHtml(x.city)}${x.speed1 ? (x.speed1/1000).toLocaleString()+'G' : '—'}${x.speed2 ? (x.speed2/1000).toLocaleString()+'G' : '—'}
    ` + : '

    No common IXPs found — these networks do not share any Internet Exchange Points.

    '; + + const commonFacHtml = commonFacs.length > 0 + ? ` + + ${commonFacs.map(f => ` + + + + + `).join('')} +
    Datacenter / Colocation FacilityCityCountry
    ${escHtml(f?.name||'')}${escHtml(f?.city||'')}${escHtml(f?.country||'')}
    ` + : '

    No shared colocation facilities found.

    '; + + const oppsHtml = (asns, opps) => opps.length === 0 + ? `

    Already maximally peered on these exchanges — or no data available.

    ` + : opps.map(x => `
    + ${escHtml(x.name)} + ${x.city ? ` · ${escHtml(x.city)}` : ''} + ${x.speed ? `${(x.speed/1000).toLocaleString()}G` : ''} +
    `).join(''); + + const peeringPage = (commonIxps.length + commonFacs.length > 0 || oppsFor1.length + oppsFor2.length > 0) ? ` +
    +

    Peering Intelligence

    +

    Common Internet Exchange Points and colocation facilities — potential peering locations between AS${d1.asn} and AS${d2.asn}.

    + +
    +
    +
    ${commonIxps.length}
    +
    Common IXPs
    +
    +
    +
    ${commonFacs.length}
    +
    Shared Facilities
    +
    +
    + +

    Common Internet Exchange Points (direct peering possible)

    + ${commonIxHtml} + +

    Shared Colocation Facilities

    + ${commonFacHtml} + + ${oppsFor1.length + oppsFor2.length > 0 ? ` +

    Expansion Opportunities

    +
    +
    +
    AS${d2.asn} could join (AS${d1.asn} is there)
    + ${oppsHtml(d2.asn, oppsFor2)} +
    +
    +
    AS${d1.asn} could join (AS${d2.asn} is there)
    + ${oppsHtml(d1.asn, oppsFor1)} +
    +
    ` : ''} +
    ` : ''; + + // Side-by-side check comparison + const allChecks = [...new Set([ + ...(d1.score_breakdown || []).map(c => c.check), + ...(d2.score_breakdown || []).map(c => c.check), + ])]; + const checkRows = allChecks.map(checkName => { + const c1 = (d1.score_breakdown || []).find(c => c.check === checkName); + const c2 = (d2.score_breakdown || []).find(c => c.check === checkName); + const isP1 = c1?.status === 'pass'; + const isP2 = c2?.status === 'pass'; + const icon = p => p ? '✓' : '✗'; + const st = p => p ? 'color:#16a34a;font-weight:700' : 'color:#dc2626;font-weight:700'; + return ` + ${escHtml(checkName)} + ${c1 ? icon(isP1) : '—'} + ${c2 ? icon(isP2) : '—'} + `; + }).join(''); + + return ` + + + + PeerCortex — AS${d1.asn} vs AS${d2.asn} Comparison + + + +
    +
    + +
    +
    ASN Comparison Report
    +
    AS${d1.asn} vs AS${d2.asn}
    +
    ${escHtml(d1.name)} ← vs → ${escHtml(d2.name)}
    +
    + ${colHtml}
    +
    Generated by PeerCortex · ${ts} · peercortex.org
    +
    +
    +

    Head-to-Head Health Checks

    + + + ${checkRows} +
    CheckAS${d1.asn}AS${d2.asn}
    +
    + ${peeringPage} +
    + PeerCortex · AS${d1.asn} vs AS${d2.asn} + Generated ${ts} · peercortex.org +
    + +`; +} + +function formatLabel(fmt) { + return fmt === 'executive' ? 'Executive Summary' : fmt === 'technical' ? 'Technical Analysis' : 'Full Report'; +} + +function escHtml(s) { + if (!s) return ''; + return String(s).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"'); +} + +/** + * Render HTML to PDF buffer using puppeteer. + * Returns Buffer or throws. + */ +async function renderHtmlToPdf(html) { + const browser = await getPuppeteerBrowser(); + if (!browser) throw new Error('PDF renderer unavailable (puppeteer not installed)'); + const page = await browser.newPage(); + try { + await page.setContent(html, { waitUntil: 'domcontentloaded', timeout: 15000 }); + const buf = await page.pdf({ + format: 'A4', + printBackground: true, + margin: { top: '18mm', bottom: '18mm', left: '16mm', right: '16mm' }, + }); + return buf; + } finally { + await page.close(); + } +} + // ============================================================ // Task 6: In-memory cache with TTL + Rate Limiting // ============================================================ @@ -553,12 +1757,13 @@ const validateResultCache = new Map(); const RESULT_CACHE_TTL = 15 * 60 * 1000; // 15 minutes function resultCacheGet(map, key) { const e = map.get(String(key)); - if (e && (Date.now() - e.ts) < RESULT_CACHE_TTL) return e.data; + const ttl = e && e.ttl ? e.ttl : RESULT_CACHE_TTL; + if (e && (Date.now() - e.ts) < ttl) return e.data; return undefined; } -function resultCacheSet(map, key, data) { +function resultCacheSet(map, key, data, ttlMs) { if (map.size > 2000) map.delete(map.keys().next().value); - map.set(String(key), { data, ts: Date.now() }); + map.set(String(key), { data, ts: Date.now(), ttl: ttlMs || RESULT_CACHE_TTL }); } // ============================================================ @@ -859,9 +2064,6 @@ const roaStore = { }, }; -// ASPA adoption tracking — store last 30 snapshots for trend analysis -const aspaAdoptionHistory = []; - // ============================================================ // PeeringDB Source Cache (L2) — net/netixlan/netfac per ASN // Eliminates redundant PDB API calls under load @@ -1099,14 +2301,8 @@ function fetchRpkiAspaFeed() { roaStore.build(roas); roaStore.saveToDisk("/opt/peercortex-app/.roa-cache.json"); - // Track ASPA adoption - const adoptionSnapshot = { - ts: Date.now(), - aspa_count: rpkiAspaMap.size, - roa_count: roaStore.count, - }; - aspaAdoptionHistory.push(adoptionSnapshot); - if (aspaAdoptionHistory.length > 30) aspaAdoptionHistory.shift(); + // Track ASPA adoption — persist to disk + update in-memory trend + recordAspaAdoptionSnapshot(rpkiAspaMap.size, roaStore.count); rpkiAspaLastFetch = Date.now(); console.log("[RPKI] Loaded " + rpkiAspaMap.size + " ASPA objects + " + roaStore.count + " ROAs from Cloudflare feed"); @@ -2373,9 +3569,9 @@ const server = http.createServer(async (req, res) => { aspa_adoption: { total_objects: rpkiAspaMap.size, roa_count: roaStore.count, - history_samples: aspaAdoptionHistory.length, - delta_last: aspaAdoptionHistory.length >= 2 - ? aspaAdoptionHistory[aspaAdoptionHistory.length - 1].aspa_count - aspaAdoptionHistory[aspaAdoptionHistory.length - 2].aspa_count + history_samples: aspaAdoptionDailyHistory.length, + delta_last: aspaAdoptionDailyHistory.length >= 2 + ? aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 1].aspa_objects - aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 2].aspa_objects : 0, }, }) @@ -3372,7 +4568,10 @@ const server = http.createServer(async (req, res) => { note: "left=upstream providers, right=downstream customers, uncertain=peers. Sorted by power score.", }, }; - resultCacheSet(validateResultCache, rawAsn, validateResult); + // Cache 0-prefix results only briefly (90s) — they may be due to temporary API failures + // Full results with prefixes are cached for the standard 15 minutes + const validateCacheTTL = allPrefixes.length === 0 ? 90 * 1000 : RESULT_CACHE_TTL; + resultCacheSet(validateResultCache, rawAsn, validateResult, validateCacheTTL); return res.end(JSON.stringify(validateResult, null, 2)); } catch (err) { res.writeHead(500); @@ -4983,7 +6182,152 @@ ${html} } } - // ── Hijack Subscribe ────────────────────────────────────────── + // ── CORS preflight for all /api/webhooks + /api/hijacks ────── + if ((reqPath.startsWith('/api/webhooks') || reqPath.startsWith('/api/hijacks') || reqPath === '/api/hijack-subscribe') && req.method === 'OPTIONS') { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', 'GET,POST,DELETE,OPTIONS'); + res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); + res.writeHead(204); return res.end(); + } + + // ── Webhook: Register ───────────────────────────────────────── + // POST /api/webhooks?asn=X body: { endpoint_url, timeout_ms?, max_retries? } + if (reqPath === '/api/webhooks' && req.method === 'POST') { + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + const params = new URL(req.url, 'http://localhost').searchParams; + const asn = params.get('asn') ? String(params.get('asn')).replace(/[^0-9]/g,'') : ''; + if (!asn) { res.writeHead(400); return res.end(JSON.stringify({error:'asn query param required'})); } + let body = ''; + req.on('data', c => body += c); + req.on('end', () => { + try { + const { endpoint_url, timeout_ms, max_retries } = JSON.parse(body || '{}'); + if (!endpoint_url || !endpoint_url.startsWith('http')) { + res.writeHead(400); return res.end(JSON.stringify({error:'endpoint_url required (http/https)'})); + } + const subs = loadWebhookSubs(); + const exists = subs.find(s => s.asn === asn && s.endpoint_url === endpoint_url); + if (exists) { res.writeHead(200); return res.end(JSON.stringify({id: exists.id, already_exists: true, secret_key: exists.secret})); } + const webhookToken = crypto.randomBytes(32).toString('hex'); + const entry = { + id: crypto.randomBytes(8).toString('hex'), + asn, endpoint_url, + secret: webhookToken, + timeout_ms: timeout_ms || 10000, + max_retries: max_retries || 5, + active: true, + created_at: new Date().toISOString(), + last_triggered_at: null, + failure_count: 0 + }; + subs.push(entry); + saveWebhookSubs(subs); + // Also ensure this ASN is in hijack monitoring + const hijackSubs = loadHijackSubs(); + if (!hijackSubs.find(s => s.asn === asn)) { + checkHijacksForAsn(asn).then(prefixes => { + hijackSubs.push({ asn, prefixes, subscribed: new Date().toISOString() }); + saveHijackSubs(hijackSubs); + }); + } + res.writeHead(201); + res.end(JSON.stringify({ id: entry.id, asn, endpoint_url, secret_key: secret, created_at: entry.created_at, note: 'Store secret_key safely — it signs all webhook payloads' })); + } catch(e) { res.writeHead(400); res.end(JSON.stringify({error: e.message})); } + }); + return; + } + + // ── Webhook: List ───────────────────────────────────────────── + // GET /api/webhooks?asn=X + if (reqPath === '/api/webhooks' && req.method === 'GET') { + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + const params = new URL(req.url, 'http://localhost').searchParams; + const asn = params.get('asn') ? String(params.get('asn')).replace(/[^0-9]/g,'') : ''; + const subs = loadWebhookSubs(); + const result = (asn ? subs.filter(s => s.asn === asn) : subs) + .map(s => ({ id: s.id, asn: s.asn, endpoint_url: s.endpoint_url, active: s.active, failure_count: s.failure_count, last_triggered_at: s.last_triggered_at, created_at: s.created_at })); + res.writeHead(200); + return res.end(JSON.stringify({ webhooks: result, total: result.length })); + } + + // ── Webhook: Delete ─────────────────────────────────────────── + // DELETE /api/webhooks/:id + if (reqPath.startsWith('/api/webhooks/') && req.method === 'DELETE' && !reqPath.includes('/test')) { + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + const id = reqPath.split('/')[3]; + const subs = loadWebhookSubs(); + const idx = subs.findIndex(s => s.id === id); + if (idx === -1) { res.writeHead(404); return res.end(JSON.stringify({error:'webhook not found'})); } + subs.splice(idx, 1); + saveWebhookSubs(subs); + res.writeHead(200); + return res.end(JSON.stringify({ deleted: true, id })); + } + + // ── Webhook: Test ───────────────────────────────────────────── + // POST /api/webhooks/:id/test + if (reqPath.match(/^\/api\/webhooks\/[^/]+\/test$/) && req.method === 'POST') { + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + const id = reqPath.split('/')[3]; + const subs = loadWebhookSubs(); + const sub = subs.find(s => s.id === id); + if (!sub) { res.writeHead(404); return res.end(JSON.stringify({error:'webhook not found'})); } + const testPayload = { event: 'test', asn: sub.asn, message: 'PeerCortex webhook test — if you receive this, delivery works!', timestamp: new Date().toISOString() }; + const start = Date.now(); + deliverWebhook(sub, testPayload, 1).then(result => { + res.writeHead(result.ok ? 200 : 502); + res.end(JSON.stringify({ ok: result.ok, response_time_ms: Date.now() - start, status: result.status, error: result.error || null })); + }); + return; + } + + // ── Hijack Events: List ─────────────────────────────────────── + // GET /api/hijacks?asn=X&limit=50&resolved=false + if (reqPath === '/api/hijacks' && req.method === 'GET') { + const params = new URL(req.url, 'http://localhost').searchParams; + const asn = params.get('asn') ? String(params.get('asn')).replace(/[^0-9]/g,'') : ''; + const limit = Math.min(parseInt(params.get('limit') || '50', 10), 200); + const resolvedFilter = params.get('resolved'); + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Cache-Control', 'no-store'); + let events = loadHijackAlerts(); + if (asn) events = events.filter(a => String(a.asn) === asn); + if (resolvedFilter === 'false') events = events.filter(a => !a.resolved); + if (resolvedFilter === 'true') events = events.filter(a => a.resolved); + const total = events.length; + events = events.slice(-limit).reverse(); + res.writeHead(200); + return res.end(JSON.stringify({ total, events })); + } + + // ── Hijack Events: Resolve ──────────────────────────────────── + // POST /api/hijacks/:id/resolve body: { resolution_notes? } + if (reqPath.match(/^\/api\/hijacks\/[^/]+\/resolve$/) && req.method === 'POST') { + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + const id = reqPath.split('/')[3]; + let body = ''; + req.on('data', c => body += c); + req.on('end', () => { + const alerts = loadHijackAlerts(); + const alert = alerts.find(a => a.id === id); + if (!alert) { res.writeHead(404); return res.end(JSON.stringify({error:'event not found'})); } + alert.resolved = true; + alert.resolved_at = new Date().toISOString(); + try { const { resolution_notes } = JSON.parse(body || '{}'); if (resolution_notes) alert.resolution_notes = resolution_notes; } catch(_){} + saveHijackAlerts(alerts); + res.writeHead(200); + res.end(JSON.stringify({ resolved: true, id, resolved_at: alert.resolved_at })); + }); + return; + } + + // ── Hijack Subscribe (legacy, kept for backwards compatibility) ─ if (reqPath === '/api/hijack-subscribe' && req.method === 'POST') { res.setHeader('Content-Type', 'application/json'); res.setHeader('Access-Control-Allow-Origin', '*'); @@ -4991,30 +6335,25 @@ ${html} req.on('data', c => body += c); req.on('end', async () => { try { - const { asn, email } = JSON.parse(body); - const asnNum = String(asn).replace(/[^0-9]/g,''); + const { asn } = JSON.parse(body || '{}'); + const asnNum = String(asn || '').replace(/[^0-9]/g,''); if (!asnNum) { res.writeHead(400); return res.end(JSON.stringify({error:'asn required'})); } const subs = loadHijackSubs(); const exists = subs.find(s => s.asn === asnNum); if (!exists) { const prefixes = await checkHijacksForAsn(asnNum); - subs.push({ asn: asnNum, email: email || '', prefixes, subscribed: new Date().toISOString() }); - fs.writeFileSync(HIJACK_SUBS_FILE, JSON.stringify(subs, null, 2)); + subs.push({ asn: asnNum, prefixes, subscribed: new Date().toISOString() }); + saveHijackSubs(subs); } + const sub = subs.find(s => s.asn === asnNum) || { prefixes: [] }; res.writeHead(200); - res.end(JSON.stringify({ ok: true, asn: asnNum, monitoring: true, prefix_count: exists ? exists.prefixes.length : subs[subs.length-1].prefixes.length })); + res.end(JSON.stringify({ ok: true, asn: asnNum, monitoring: true, prefix_count: sub.prefixes.length })); } catch(e) { res.writeHead(500); res.end(JSON.stringify({error:e.message})); } }); return; } - if (reqPath === '/api/hijack-subscribe' && req.method === 'OPTIONS') { - res.setHeader('Access-Control-Allow-Origin','*'); - res.setHeader('Access-Control-Allow-Methods','POST,OPTIONS'); - res.setHeader('Access-Control-Allow-Headers','Content-Type'); - res.writeHead(204); return res.end(); - } - // ── Hijack Alerts ───────────────────────────────────────────── + // ── Hijack Alerts (legacy endpoint, kept for backwards compatibility) ─ if (reqPath.startsWith('/api/hijack-alerts')) { const params = new URL(req.url, 'http://localhost').searchParams; const asn = (params.get('asn') || '').replace(/[^0-9]/g,''); @@ -5022,7 +6361,7 @@ ${html} res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Cache-Control', 'no-store'); const allAlerts = loadHijackAlerts(); - const alerts = asn ? allAlerts.filter(a => a.asn === asn) : allAlerts; + const alerts = asn ? allAlerts.filter(a => String(a.asn) === asn) : allAlerts; const subs = loadHijackSubs(); const sub = subs.find(s => s.asn === asn); res.writeHead(200); @@ -5213,11 +6552,226 @@ ${html} } } + // ============================================================ + // FEATURE 2: PDF Export + // GET /api/export/pdf?asn=X&format=report|executive|technical + // GET /api/export/pdf/compare?asn1=X&asn2=Y + // ============================================================ + + // Helper: fetch JSON from internal endpoint + async function fetchInternal(path) { + return new Promise((resolve, reject) => { + const opts = { hostname: '127.0.0.1', port: PORT, path, method: 'GET' }; + const req2 = http.request(opts, res2 => { + let body = ''; + res2.on('data', c => body += c); + res2.on('end', () => { + try { resolve(JSON.parse(body)); } + catch(e) { reject(new Error('JSON parse failed: ' + body.slice(0, 200))); } + }); + }); + req2.on('error', reject); + req2.setTimeout(30000, () => { req2.destroy(); reject(new Error('Internal request timeout')); }); + req2.end(); + }); + } + + if (reqPath === '/api/export/pdf' && req.method === 'GET') { + const rawAsn = (url.searchParams.get('asn') || '').replace(/[^0-9]/g, ''); + const format = ['executive', 'technical', 'report'].includes(url.searchParams.get('format')) + ? url.searchParams.get('format') : 'report'; + if (!rawAsn) { + res.writeHead(400, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: 'Missing asn parameter' })); + } + const cacheKey = `pdf:${rawAsn}:${format}`; + const cached = pdfCacheGet(cacheKey); + if (cached) { + res.writeHead(200, { ...{'Content-Type':'application/json'}, 'Content-Type': 'application/pdf', 'Content-Disposition': `inline; filename="peercortex-AS${rawAsn}-${format}.pdf"`, 'X-Cache': 'HIT', 'Content-Length': cached.length }); + return res.end(cached); + } + try { + const [validateData, aspaData] = await Promise.all([ + fetchInternal(`/api/validate?asn=${rawAsn}`), + fetchInternal(`/api/aspa?asn=${rawAsn}`).catch(() => null), + ]); + if (validateData.error) { + res.writeHead(400, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: validateData.error })); + } + const html = buildPdfHtml(validateData, aspaData, format); + const pdfBuf = await renderHtmlToPdf(html); + pdfCacheSet(cacheKey, pdfBuf); + res.writeHead(200, { ...{'Content-Type':'application/json'}, 'Content-Type': 'application/pdf', 'Content-Disposition': `inline; filename="peercortex-AS${rawAsn}-${format}.pdf"`, 'Content-Length': pdfBuf.length }); + return res.end(pdfBuf); + } catch (err) { + console.error('[PDF] Error:', err.message); + res.writeHead(503, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: 'PDF generation failed', message: err.message })); + } + } + + if (reqPath === '/api/export/pdf/compare' && req.method === 'GET') { + const asn1 = (url.searchParams.get('asn1') || '').replace(/[^0-9]/g, ''); + const asn2 = (url.searchParams.get('asn2') || '').replace(/[^0-9]/g, ''); + if (!asn1 || !asn2) { + res.writeHead(400, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: 'Missing asn1 or asn2 parameter' })); + } + if (asn1 === asn2) { + res.writeHead(400, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: 'asn1 and asn2 must be different' })); + } + const cacheKey = `pdf:compare:${Math.min(+asn1,+asn2)}:${Math.max(+asn1,+asn2)}`; + const cached = pdfCacheGet(cacheKey); + if (cached) { + res.writeHead(200, { ...{'Content-Type':'application/json'}, 'Content-Type': 'application/pdf', 'Content-Disposition': `inline; filename="peercortex-AS${asn1}-vs-AS${asn2}.pdf"`, 'X-Cache': 'HIT', 'Content-Length': cached.length }); + return res.end(cached); + } + try { + const [v1, a1, l1, v2, a2, l2] = await Promise.all([ + fetchInternal(`/api/validate?asn=${asn1}`), + fetchInternal(`/api/aspa?asn=${asn1}`).catch(() => null), + fetchInternal(`/api/lookup?asn=${asn1}`).catch(() => null), + fetchInternal(`/api/validate?asn=${asn2}`), + fetchInternal(`/api/aspa?asn=${asn2}`).catch(() => null), + fetchInternal(`/api/lookup?asn=${asn2}`).catch(() => null), + ]); + if (v1.error || v2.error) { + res.writeHead(400, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: v1.error || v2.error })); + } + const html = buildComparisonPdfHtml(v1, a1, l1, v2, a2, l2); + const pdfBuf = await renderHtmlToPdf(html); + pdfCacheSet(cacheKey, pdfBuf); + res.writeHead(200, { ...{'Content-Type':'application/json'}, 'Content-Type': 'application/pdf', 'Content-Disposition': `inline; filename="peercortex-AS${asn1}-vs-AS${asn2}.pdf"`, 'Content-Length': pdfBuf.length }); + return res.end(pdfBuf); + } catch (err) { + console.error('[PDF] Error:', err.message); + res.writeHead(503, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: 'PDF generation failed', message: err.message })); + } + } + + // CORS preflight for PDF export (already handled globally above, belt-and-suspenders) + if (reqPath.startsWith('/api/export/') && req.method === 'OPTIONS') { + res.writeHead(204); + return res.end(); + } + + // ============================================================ + // FEATURE 3: ASPA Adoption Tracker — API + Dashboard + // GET /aspa-adoption → dashboard HTML + // GET /api/aspa-adoption-stats?period=7d|30d|1y → JSON trend + // GET /api/aspa-adoption-stats/export?format=csv|json&period=30d + // ============================================================ + + if (reqPath === '/aspa-adoption') { + res.setHeader('Content-Type', 'text/html; charset=utf-8'); + res.writeHead(200); + return res.end(buildAspaAdoptionDashboard()); + } + + if (reqPath === '/api/aspa-adoption-stats' && req.method === 'GET') { + const period = ['7d','30d','90d','1y'].includes(url.searchParams.get('period')) + ? url.searchParams.get('period') : '30d'; + const trend = getAdoptionTrend(period); + const latest = aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 1]; + const prev = aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 2]; + + // Linear regression forecast + function forecast(data, daysAhead) { + if (data.length < 2) return null; + const n = data.length; + const xs = data.map((_, i) => i); + const ys = data.map(d => d.coverage_pct_atlas); + const xMean = xs.reduce((a,b)=>a+b,0)/n; + const yMean = ys.reduce((a,b)=>a+b,0)/n; + const num = xs.reduce((s,x,i)=>s+(x-xMean)*(ys[i]-yMean),0); + const den = xs.reduce((s,x)=>s+(x-xMean)**2,0); + if (den===0) return yMean; + const slope = num/den; + return Math.max(0, Math.min(100, Math.round((yMean + slope*(n-1+daysAhead))*100)/100)); + } + + const trend30 = getAdoptionTrend('30d'); + const result = { + period, + current: { + date: latest?.date, + aspa_objects: latest?.aspa_objects ?? rpkiAspaMap.size, + roa_count: latest?.roa_count, + atlas_asns_total: latest?.atlas_asns_total ?? 0, + atlas_asns_with_aspa: latest?.atlas_asns_with_aspa ?? 0, + coverage_pct_atlas: latest?.coverage_pct_atlas ?? 0, + delta_from_previous: prev ? (latest?.aspa_objects ?? 0) - prev.aspa_objects : 0, + }, + trend: trend.map(s => ({ + date: s.date, + aspa_objects: s.aspa_objects, + coverage_pct_atlas: s.coverage_pct_atlas, + atlas_asns_total: s.atlas_asns_total, + })), + forecast: { + predicted_90d: forecast(trend30, 90), + confidence: trend30.length >= 10 ? 0.75 : 0.5, + method: 'linear_regression', + based_on_samples: trend30.length, + }, + meta: { + total_snapshots: aspaAdoptionDailyHistory.length, + last_updated: latest?.date ?? null, + denominator: 'atlas_visible_asns', + source: 'rpki_cloudflare_feed', + } + }; + res.setHeader('Content-Type', 'application/json'); + res.writeHead(200); + return res.end(JSON.stringify(result, null, 2)); + } + + if (reqPath === '/api/aspa-adoption-stats/export' && req.method === 'GET') { + const fmt = url.searchParams.get('format') === 'csv' ? 'csv' : 'json'; + const period = ['7d','30d','90d','1y'].includes(url.searchParams.get('period')) + ? url.searchParams.get('period') : '30d'; + const data = getAdoptionTrend(period); + + if (fmt === 'csv') { + const header = 'date,aspa_objects,roa_count,atlas_asns_total,atlas_asns_with_aspa,coverage_pct_atlas,aspa_delta\n'; + const rows = data.map(s => + `${s.date},${s.aspa_objects},${s.roa_count},${s.atlas_asns_total},${s.atlas_asns_with_aspa},${s.coverage_pct_atlas},${s.aspa_delta??0}` + ).join('\n'); + res.setHeader('Content-Type', 'text/csv'); + res.setHeader('Content-Disposition', `attachment; filename="peercortex-aspa-adoption-${period}.csv"`); + res.writeHead(200); + return res.end(header + rows); + } + + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Content-Disposition', `attachment; filename="peercortex-aspa-adoption-${period}.json"`); + res.writeHead(200); + return res.end(JSON.stringify({ period, count: data.length, data }, null, 2)); + } + + // GET /api/ipv6-adoption-stats?refresh=1 + if (reqPath === '/api/ipv6-adoption-stats' && req.method === 'GET') { + const force = url.searchParams.get('refresh') === '1'; + try { + const data = await fetchIpv6AdoptionStats(force); + res.setHeader('Content-Type', 'application/json'); + res.writeHead(200); + return res.end(JSON.stringify(data, null, 2)); + } catch (err) { + res.writeHead(503); + return res.end(JSON.stringify({ error: 'IPv6 stats unavailable', message: err.message })); + } + } + // 404 res.writeHead(404); res.end( JSON.stringify({ - error: "Not found. Endpoints: /api/health, /api/validate?asn=X, /api/lookup?asn=X, /api/aspa?asn=X, /api/aspa/verify?asn=X, /api/bgproutes?asn=X, /api/compare?asn1=X&asn2=Y, /api/peers/find?ix=NAME, /api/prefix/detail?prefix=X, /api/ix/detail?ix_id=X", + error: "Not found. Endpoints: /api/health, /api/validate?asn=X, /api/lookup?asn=X, /api/aspa?asn=X, /api/aspa/verify?asn=X, /api/bgproutes?asn=X, /api/compare?asn1=X&asn2=Y, /api/peers/find?ix=NAME, /api/prefix/detail?prefix=X, /api/ix/detail?ix_id=X, /api/export/pdf?asn=X&format=report|executive|technical, /api/export/pdf/compare?asn1=X&asn2=Y, /api/aspa-adoption-stats?period=30d, /api/ipv6-adoption-stats", }) ); }); @@ -5379,8 +6933,11 @@ loadRipeStatCacheFromDisk("/opt/peercortex-app/.ripe-stat-cache.json"); // Phase 1: Fetch fresh RPKI feed (ASPA + ROA) + Atlas probes + PDB org countries + MANRS participants ensureManrsCache(); // fire-and-forget, 24h cache Promise.all([fetchRpkiAspaFeed(), fetchAllAtlasProbes(), fetchPdbOrgCountries()]).then(() => { + // Re-record ASPA adoption snapshot now that Atlas data is fully loaded + recordAspaAdoptionSnapshot(rpkiAspaMap.size, roaStore.count); + server.listen(PORT, "0.0.0.0", () => { - console.log("PeerCortex v0.6.1 running on http://0.0.0.0:" + PORT); + console.log("PeerCortex v0.6.5 running on http://0.0.0.0:" + PORT); console.log("bgproutes.io API key: " + (BGPROUTES_API_KEY ? "configured" : "NOT configured")); console.log("PeeringDB API key: " + (PEERINGDB_API_KEY ? "configured" : "NOT configured")); console.log("RPKI ASPA objects: " + rpkiAspaMap.size); diff --git a/webhook-subs.json b/webhook-subs.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/webhook-subs.json @@ -0,0 +1 @@ +[] \ No newline at end of file -- 2.43.0 From 3b978c4427eac1fefa72a7c9db878a8eac58ed9f Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 16 Jul 2026 09:36:07 +0200 Subject: [PATCH 02/11] fix: remove unused critical-RCE dependency, bump node-cron to drop uuid vuln - node-whois was declared in package.json but required/imported nowhere in the codebase (verified via repo-wide grep) -- pure dead weight that was dragging in a critical arbitrary-code-execution chain (underscore 1.5.2 via optimist, CVSS 9.8). No fixed version exists upstream (latest 2.1.3 still depends on the same vulnerable optimist/underscore), so the only real fix was removal. Zero behavior change since nothing called it. - node-cron 3.0.3 -> 4.6.0: only real usage is two plain cron.schedule() calls in src/features/hijack-alerts/retry-scheduler.ts and src/features/aspa-adoption/scheduler.ts -- API unchanged, low risk. 4.6.0 has zero runtime deps (drops the vulnerable uuid transitive dep) and ships its own TS types, so @types/node-cron was also removed to avoid duplicate/conflicting type declarations. - repository/bugs URLs in package.json corrected from the GitHub repo (deleted 2026-07-14) to the actual Gitea repo. 12 -> 6 vulnerabilities (6 critical/1 high/5 moderate -> 2 critical/1 high/3 moderate). Remaining 6 are entirely in the vitest/vite/esbuild dev-tooling chain (vite dev-server SSRF, GHSA-67mh-4wv8-2f99) -- not production-exposed, and fixing requires a vitest 2.x -> 4.x major bump that needs its own test-suite verification pass, not folded into this commit. tsc --noEmit confirms no new type errors from the node-cron/types change (remaining TS6133 unused-var warnings in src/sources/*.ts are pre-existing skeleton-source stubs, unrelated to this commit). --- package-lock.json | 1208 +-------------------------------------------- package.json | 8 +- 2 files changed, 8 insertions(+), 1208 deletions(-) diff --git a/package-lock.json b/package-lock.json index d9c65a7..3a585ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,8 +17,7 @@ "cheerio": "^1.0.0", "fastify": "^5.8.5", "joi": "^17.11.0", - "node-cron": "^3.0.3", - "node-whois": "^2.1.3", + "node-cron": "^4.6.0", "ollama": "^0.5.12", "pg": "^8.11.0", "playwright": "^1.40.0", @@ -32,7 +31,6 @@ "@playwright/test": "^1.40.0", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.10.0", - "@types/node-cron": "^3.0.0", "@types/pg": "^8.11.0", "@typescript-eslint/eslint-plugin": "^8.18.0", "@typescript-eslint/parser": "^8.18.0", @@ -131,74 +129,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", - "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", - "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", - "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", - "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.28.1", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", @@ -216,363 +146,6 @@ "node": ">=18" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", - "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", - "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", - "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", - "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", - "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", - "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", - "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", - "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", - "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", - "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", - "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", - "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", - "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", - "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", - "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", - "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", - "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", - "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", - "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", - "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", - "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -1289,34 +862,6 @@ "streamx": "^2.15.0" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", - "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", - "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.62.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", @@ -1331,314 +876,6 @@ "darwin" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", - "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", - "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", - "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", - "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", - "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", - "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", - "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", - "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", - "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", - "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", - "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", - "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", - "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", - "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", - "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", - "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", - "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", - "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", - "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", - "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", - "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", - "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", @@ -1699,13 +936,6 @@ "undici-types": "~6.21.0" } }, - "node_modules/@types/node-cron": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.11.tgz", - "integrity": "sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/pg": { "version": "8.20.0", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz", @@ -5065,12 +4295,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", - "license": "MIT" - }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", @@ -5177,26 +4401,12 @@ } }, "node_modules/node-cron": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", - "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-4.6.0.tgz", + "integrity": "sha512-Si/bzYiKRHOB8/a99T2+SDGN582ONDMSTlJr5oCkT6GtnqPjZ2s10eoQRYkW9ZHwjVxONL+W8Fb+qR0AHMQsdg==", "license": "ISC", - "dependencies": { - "uuid": "8.3.2" - }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/node-whois": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/node-whois/-/node-whois-2.1.3.tgz", - "integrity": "sha512-8Ysz5s5AfSxiLKiFrFbWma3YBe+e/13uGrfJCemztdX5e2cbbJ61w28YHoVJ/u6jx1porvaBthbciSppz7UutQ==", - "deprecated": "WARNING: This project has been renamed from node-whois to whois. Install using whois instead.", - "license": "FreeBSD", - "dependencies": { - "optimist": "^0.6.1", - "underscore": "~1.5.2" + "node": ">=20" } }, "node_modules/nth-check": { @@ -5271,16 +4481,6 @@ "wrappy": "1" } }, - "node_modules/optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", - "license": "MIT/X11", - "dependencies": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -7129,11 +6329,6 @@ "node": ">=14.17" } }, - "node_modules/underscore": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.5.2.tgz", - "integrity": "sha512-yejOFsRnTJs0N9CK5Apzf6maDO2djxGoLLrlZlvGs2o9ZQuhIhDL18rtFyy4FBIbOkzA6+4hDgXbgz5EvDQCXQ==" - }, "node_modules/undici": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", @@ -7174,16 +6369,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -7276,74 +6461,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", @@ -7361,312 +6478,6 @@ "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -7863,15 +6674,6 @@ "node": ">=0.10.0" } }, - "node_modules/wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", diff --git a/package.json b/package.json index f891f93..393fdab 100644 --- a/package.json +++ b/package.json @@ -53,10 +53,10 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/renefichtmueller/PeerCortex.git" + "url": "https://gitea.context-x.org/rene/PeerCortex.git" }, "bugs": { - "url": "https://github.com/renefichtmueller/PeerCortex/issues" + "url": "https://gitea.context-x.org/rene/PeerCortex/issues" }, "homepage": "https://peercortex.org", "engines": { @@ -71,8 +71,7 @@ "cheerio": "^1.0.0", "fastify": "^5.8.5", "joi": "^17.11.0", - "node-cron": "^3.0.3", - "node-whois": "^2.1.3", + "node-cron": "^4.6.0", "ollama": "^0.5.12", "pg": "^8.11.0", "playwright": "^1.40.0", @@ -83,7 +82,6 @@ "@playwright/test": "^1.40.0", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.10.0", - "@types/node-cron": "^3.0.0", "@types/pg": "^8.11.0", "@typescript-eslint/eslint-plugin": "^8.18.0", "@typescript-eslint/parser": "^8.18.0", -- 2.43.0 From 04bc8e3c4cdcf59ef2db76f2c1aa601b46cedb8b Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 16 Jul 2026 09:40:00 +0200 Subject: [PATCH 03/11] chore: add .security-scan-allowlist for known false positives Own product name/domain/deploy-path self-references, the maintainer's public contact address, the bogon-detection feature's hardcoded RFC 5735/6890 range constants, and one already-reviewed home-LAN DB_HOST default -- all previously confirmed false positives that forced a manual --no-verify judgment call on every single push to this repo. Verified against the actual scanner (~/.claude/hooks/lib/security-scan-core.sh): 0 findings remain. --- .security-scan-allowlist | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .security-scan-allowlist diff --git a/.security-scan-allowlist b/.security-scan-allowlist new file mode 100644 index 0000000..9c68a7d --- /dev/null +++ b/.security-scan-allowlist @@ -0,0 +1,34 @@ +# PeerCortex pre-push scan allowlist — reviewed false positives (2026-07-16). +# ERE, one pattern per line, matched case-insensitively against flagged content. +# See ~/.claude/hooks/lib/security-scan-core.sh for how this file is applied. +# Keep this NARROW — the scanner's philosophy is "block too often rather than +# too little"; only add a pattern here after actually confirming it's not a leak. + +# Own product name / own repo / own deploy path — self-references, not leaked infra. +PeerCortex +/opt/peercortex-app +peercortex\.org +gitea\.context-x\.org/rene/PeerCortex + +# Own maintainer contact, intentionally public (User-Agent strings, package.json author). +rene\.fichtmueller@flexoptix\.net + +# RFC 5735 / RFC 6890 bogon-range constants used by the Network Health Report's +# bogon-detection check (server.js `bogonV4`) — standardized documentation/private +# ranges hardcoded as comparison targets, not leaked infrastructure addresses. +net: "0\.0\.0\.0" +net: "10\.0\.0\.0" +net: "100\.64\.0\.0" +net: "127\.0\.0\.0" +net: "169\.254\.0\.0" +net: "172\.16\.0\.0" +net: "192\.0\.2\.0" +net: "192\.168\.0\.0" +net: "198\.51\.100\.0" +net: "203\.0\.113\.0" +net: "240\.0\.0\.0" + +# Rene's home-network default fallback for local Postgres dev (DB_HOST env default +# in bgp-hijack-monitor.js, local-db-client.js, magatama-s2ten-bgp-enrichment.js). +# LAN-only address, no credentials attached, already reviewed as non-sensitive. +192\.168\.178\.82 -- 2.43.0 From 141911537d33dc00e9c4f38776d5dd3e4a9125f8 Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 16 Jul 2026 11:54:33 +0200 Subject: [PATCH 04/11] feat: wire up the 13 orphaned Fastify routes via internal API server proxy The 2026-07-14 backend refactor (PR #1) moved 13 features' route logic out of server.js into src/features/*/routes.ts as Fastify plugins, and left "// Migrated to src/features/X/" comments behind -- but never actually built or started anything that served those plugins. Found a complete, unused Fastify app bootstrap already sitting at src/api/server.ts (added in an earlier commit, 5554c1a, alongside the BGP hijack/PDF-export/ASPA-adoption work) that imports and registers all 16 route modules, including 3 (pdf-export, aspa-adoption, hijack-alerts) with proper Postgres-backed implementations, tests, and PDF templates -- more capable than the puppeteer-based inline version kept from the production snapshot. Also confirmed there is no code anywhere that calls initializeDatabase() or startApiServer(): this Fastify server had never actually been run, not even once. What this commit does: - Fixes 6 real TypeScript compile errors blocking `tsc` from building the affected modules cleanly (all pre-existing, none introduced by this branch): - src/routes/hijack-alerts.ts: route generic was missing `Body` in its type param, so it didn't match the handler's own declared type - src/features/aspa-adoption/scheduler.ts: node-cron v4's ScheduledTask dropped `.destroy()` (relevant now that this branch already bumped node-cron 3->4 for the uuid CVE fix) -- `.stop()` alone is sufficient - src/features/{bgp-communities,rpki-history}/routes.ts: `response.json()` typed as `{}` under this @types/node version, cast to `any` to match this file's existing loose-typing style - src/features/pdf-export/cache-manager.ts: `NodeJS.Timer` -> `NodeJS.Timeout` (what setInterval/clearInterval actually use) - src/features/pdf-export/renderer.ts: this uses Playwright, not Puppeteer -- `timeout` isn't a page.pdf() option in Playwright, moved to page.setDefaultTimeout() before the call - Adds src/api/index.ts as the actual entry point (there wasn't one). Calls initializeDatabase() before dynamically importing ./server.js, because src/routes/hijack-alerts.ts calls getDatabase() at module load time -- a static top-level import of ./server would have crashed on startup before initializeDatabase() ever ran. Verified this boots cleanly and serves real responses (changelog-data, ix-matrix, rib/prefix graceful-503, bgp-communities with a live RIPE Stat call) in local testing. - Wires server.js to reverse-proxy the 11 genuinely-orphaned paths (submarine-cables, global-infra, communities, irr-audit, asset-expand, rpki-history, aspath, looking-glass, ix-matrix, changelog-data, rib/*, prefix-changes) to this new internal server via a plain http.request() proxy -- chosen over exposing a second Cloudflare Tunnel ingress rule so this stays a same-origin, internal-only change with no DNS/tunnel config to touch. Verified the proxy mechanism itself against a live instance of the new server. Deliberately did NOT proxy /api/webhooks, /api/hijacks, or /api/hijack-subscribe -- server.js already serves those paths inline (file-backed, live, working), and src/routes/hijack-alerts.ts registers the same path names against an empty Postgres table. Proxying would have silently shadowed working data with nothing. - Default port 3102, not 3100: checked Erik and found 3100 already bound by an unrelated docker-proxy container. 3102 is free and reads as "the second peercortex port" next to the existing 3101. - Adds a `peercortex-api` PM2 app to ecosystem.config.js on Erik (backed up first via rollback-standard.sh) -- config only, NOT started. Nothing is deployed to Erik as part of this commit: no dist/ upload, no `npm install` for fastify/pg on Erik, no `pm2 start`. server.js and public/index.html on Erik are untouched. --- .gitignore | 1 + deploy.sh | 5 ++ server.js | 91 ++++++++++++++++++++---- src/api/index.ts | 49 +++++++++++++ src/api/server.ts | 4 +- src/features/aspa-adoption/scheduler.ts | 1 - src/features/bgp-communities/routes.ts | 2 +- src/features/pdf-export/cache-manager.ts | 2 +- src/features/pdf-export/renderer.ts | 2 +- src/features/rpki-history/routes.ts | 2 +- src/routes/hijack-alerts.ts | 2 +- 11 files changed, 138 insertions(+), 23 deletions(-) create mode 100644 src/api/index.ts diff --git a/.gitignore b/.gitignore index 6915d9d..8bd748a 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,7 @@ audit/__pycache__/ audit/asn_registry.json audit/latest_report.txt backups/ +.rollback/ public/index.html.bak public/lia.html server.js.bak* diff --git a/deploy.sh b/deploy.sh index 34b226a..4b35cd8 100755 --- a/deploy.sh +++ b/deploy.sh @@ -1,5 +1,10 @@ #!/bin/bash # PeerCortex safe deploy script — always backup before restart +# NOTE: this only covers server.js + public/index.html (the main site, +# PM2 process "peercortex"). The Fastify API server (PM2 process +# "peercortex-api", dist/api/index.js, port 3102) needs `npm run build` +# run first and `pm2 restart peercortex-api` separately -- see +# ecosystem.config.js on Erik for both app definitions. BACKUP_DIR=/opt/peercortex-app/backups mkdir -p $BACKUP_DIR TS=$(date +%Y%m%d_%H%M%S) diff --git a/server.js b/server.js index 4061b91..e54e8ff 100644 --- a/server.js +++ b/server.js @@ -3103,6 +3103,40 @@ async function fetchWhois(resource) { return result; } +// ============================================================ +// Internal API Server Proxy +// ============================================================ +// Several routes were extracted into src/api/ + src/features/*/routes.ts +// (Fastify, dist/api/index.js, run as a separate PM2 process on +// API_SERVER_PORT) but were never re-wired here after that migration — +// they just silently 404'd. This forwards those specific paths through +// rather than reimplementing them inline a second time. +const API_SERVER_PORT = parseInt(process.env.API_SERVER_PORT || "3102", 10); + +function proxyToApiServer(req, res, targetUrl) { + const proxyReq = http.request( + { + hostname: "127.0.0.1", + port: API_SERVER_PORT, + path: targetUrl, + method: req.method, + headers: Object.assign({}, req.headers, { host: "127.0.0.1:" + API_SERVER_PORT }), + }, + (proxyRes) => { + res.writeHead(proxyRes.statusCode, proxyRes.headers); + proxyRes.pipe(res); + } + ); + proxyReq.on("error", (err) => { + console.error("[API Proxy] Error forwarding " + targetUrl + ":", err.message); + if (!res.headersSent) { + res.writeHead(502, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "API server unavailable", detail: err.message })); + } + }); + req.pipe(proxyReq); +} + // ============================================================ // HTTP Server // ============================================================ @@ -5877,10 +5911,14 @@ const server = http.createServer(async (req, res) => { // Feature 28: Submarine Cable overlay (TeleGeography proxy) // ── Submarine Cables map data ───────────────────────────────── - // Migrated to src/features/submarine-cables/ + if (reqPath === '/api/submarine-cables') { + return proxyToApiServer(req, res, req.url); + } // ── Global datacenter/IXP map (PeeringDB proxy) ─────────────── - // Migrated to src/features/global-infra/ + if (reqPath === '/api/global-infra') { + return proxyToApiServer(req, res, req.url); + } // ── Changelog page ───────────────────────────────────────── @@ -5927,26 +5965,39 @@ ${html} } // ── BGP Community Decoder ──────────────────────────────────── - // Migrated to src/features/bgp-communities/ + if (reqPath === '/api/communities') { + return proxyToApiServer(req, res, req.url); + } // ── IRR Audit ───────────────────────────────────────────────── - // Migrated to src/features/irr-audit/ - + if (reqPath === '/api/irr-audit') { + return proxyToApiServer(req, res, req.url); + } // ── AS-SET Expander ─────────────────────────────────────────── - // Migrated to src/features/asset-expand/ - + if (reqPath === '/api/asset-expand') { + return proxyToApiServer(req, res, req.url); + } + // ── Routing History (prefix table via RIPE Stat routing-history) ── - // Migrated to src/features/rpki-history/ + if (reqPath === '/api/rpki-history') { + return proxyToApiServer(req, res, req.url); + } // ── AS-PATH Visualizer (RIPE Stat looking-glass) ──────────────── - // Migrated to src/features/aspath/ + if (reqPath === '/api/aspath') { + return proxyToApiServer(req, res, req.url); + } // ── Looking Glass (RIPE Stat) ───────────────────────────────── - // Migrated to src/features/looking-glass/ + if (reqPath === '/api/looking-glass') { + return proxyToApiServer(req, res, req.url); + } // ── IXP Peering Matrix ──────────────────────────────────────── - // Migrated to src/features/ix-matrix/ + if (reqPath === '/api/ix-matrix') { + return proxyToApiServer(req, res, req.url); + } // ── CORS preflight for all /api/webhooks + /api/hijacks ────── @@ -6137,16 +6188,26 @@ ${html} // ── Hijack Alerts (legacy read) ─────────────────────────────── - // Migrated to src/routes/hijack-alerts (Fastify feature) + // src/routes/hijack-alerts.ts registers /api/webhooks + /api/hijacks under + // the same paths this file already serves above (file-backed, live). + // Deliberately NOT proxied here — that would shadow working data with an + // empty Postgres-backed implementation. Not a gap, just two feature + // branches that ended up naming their routes the same thing. // ── Changelog JSON API ──────────────────────────────────────── - // Migrated to src/features/changelog/ + if (reqPath === '/changelog-data') { + return proxyToApiServer(req, res, req.url); + } // ── bio-rd RIB routes ───────────────────────────────────────── - // Migrated to src/features/rib/ + if (reqPath.startsWith('/api/rib/')) { + return proxyToApiServer(req, res, req.url); + } // ── Prefix Changes ────────────────────────────────────────────── - // Migrated to src/features/prefix-changes/ + if (reqPath === '/api/prefix-changes') { + return proxyToApiServer(req, res, req.url); + } // ============================================================ // FEATURE 2: PDF Export diff --git a/src/api/index.ts b/src/api/index.ts new file mode 100644 index 0000000..b9cfa71 --- /dev/null +++ b/src/api/index.ts @@ -0,0 +1,49 @@ +import fs from 'fs' +import { initializeDatabase, closeDatabaseConnection } from '../lib/db' + +function loadEnv(): void { + const envPath = process.env.ENV_PATH ?? '/opt/peercortex-app/.env' + try { + const envContent = fs.readFileSync(envPath, 'utf8') + for (const line of envContent.split('\n')) { + const trimmed = line.trim() + if (!trimmed || trimmed.startsWith('#')) continue + const eqIdx = trimmed.indexOf('=') + if (eqIdx > 0) { + const key = trimmed.substring(0, eqIdx).trim() + const val = trimmed.substring(eqIdx + 1).trim() + if (!process.env[key]) process.env[key] = val + } + } + console.log('[API] Environment variables loaded from', envPath) + } catch { + console.warn('[API] Could not read .env file at', envPath) + } +} + +async function main(): Promise { + loadEnv() + + // initializeDatabase() must run before anything imports src/routes/hijack-alerts, + // which calls getDatabase() at module load time. Dynamic import defers evaluation + // of ./server (and its own static imports) until after the pool exists. + initializeDatabase() + + const { startApiServer } = await import('./server.js') + const port = parseInt(process.env.API_PORT ?? '3102', 10) + await startApiServer(port) +} + +async function shutdown(signal: string): Promise { + console.log(`[API] ${signal} received, shutting down`) + await closeDatabaseConnection() + process.exit(0) +} + +process.on('SIGTERM', () => void shutdown('SIGTERM')) +process.on('SIGINT', () => void shutdown('SIGINT')) + +main().catch((error) => { + console.error('[API] Fatal startup error:', error) + process.exit(1) +}) diff --git a/src/api/server.ts b/src/api/server.ts index 513807f..0b13c5f 100644 --- a/src/api/server.ts +++ b/src/api/server.ts @@ -17,7 +17,7 @@ import { changelogRoutes } from '../features/changelog/routes' import { ribRoutes } from '../features/rib/routes' import { hijackSubscribeRoutes } from '../features/hijack-subscribe/routes' -export async function createApiServer(port: number = 3100) { +export async function createApiServer(_port: number = 3102) { const fastify = Fastify({ logger: { level: process.env.LOG_LEVEL ?? 'info', @@ -66,7 +66,7 @@ export async function createApiServer(port: number = 3100) { return fastify } -export async function startApiServer(port: number = 3100): Promise { +export async function startApiServer(port: number = 3102): Promise { const server = await createApiServer(port) try { diff --git a/src/features/aspa-adoption/scheduler.ts b/src/features/aspa-adoption/scheduler.ts index dce3677..b914398 100644 --- a/src/features/aspa-adoption/scheduler.ts +++ b/src/features/aspa-adoption/scheduler.ts @@ -41,7 +41,6 @@ export class ASPAAdoptionScheduler { stop(): void { if (this.task) { this.task.stop() - this.task.destroy() this.task = null console.log('[ASPA Scheduler] Job stopped') } diff --git a/src/features/bgp-communities/routes.ts b/src/features/bgp-communities/routes.ts index 50aa5fa..c72ea73 100644 --- a/src/features/bgp-communities/routes.ts +++ b/src/features/bgp-communities/routes.ts @@ -29,7 +29,7 @@ export async function bgpCommunitiesRoutes(fastify: FastifyInstance): Promise = new Map() private readonly TTL_MS = 5 * 60 * 1000 - private cleanupInterval: NodeJS.Timer | null = null + private cleanupInterval: NodeJS.Timeout | null = null constructor() { this.startCleanup() diff --git a/src/features/pdf-export/renderer.ts b/src/features/pdf-export/renderer.ts index 135ad15..fee25ff 100644 --- a/src/features/pdf-export/renderer.ts +++ b/src/features/pdf-export/renderer.ts @@ -24,12 +24,12 @@ export class PDFRenderer { const page = await this.browser.newPage() try { + page.setDefaultTimeout(timeout_ms) await page.setContent(html, { waitUntil: 'networkidle' }) const pdfBuffer = await page.pdf({ format: 'A4', margin: { top: '0', right: '0', bottom: '0', left: '0' }, - timeout: timeout_ms, }) return pdfBuffer diff --git a/src/features/rpki-history/routes.ts b/src/features/rpki-history/routes.ts index b3e34d9..acace73 100644 --- a/src/features/rpki-history/routes.ts +++ b/src/features/rpki-history/routes.ts @@ -29,7 +29,7 @@ export async function rpkiHistoryRoutes(fastify: FastifyInstance): Promise if (!response.ok) { throw new Error(`RIPE Stat returned HTTP ${response.status}`); } - const data = await response.json(); + const data = await response.json() as any; const byOrigin = (data && data.data && data.data.by_origin) || []; const prefixes: any[] = []; diff --git a/src/routes/hijack-alerts.ts b/src/routes/hijack-alerts.ts index 506aa9a..8289002 100644 --- a/src/routes/hijack-alerts.ts +++ b/src/routes/hijack-alerts.ts @@ -25,7 +25,7 @@ interface CreateHijackRequest { export async function hijackAlertsRoutes(fastify: FastifyInstance): Promise { // Register webhook subscription - fastify.post<{ Querystring: { asn: string } }>( + fastify.post<{ Querystring: { asn: string }; Body: RegisterWebhookRequest }>( '/webhooks', async (request: FastifyRequest<{ Querystring: { asn: string }; Body: RegisterWebhookRequest }>, reply: FastifyReply) => { try { -- 2.43.0 From cc6b81ba8e966b5e8c1123e4a6689cb61c5cc7c6 Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 16 Jul 2026 15:43:49 +0200 Subject: [PATCH 05/11] fix: correct ASPA verification algorithm + fix systemic silent-failure/fake-data patterns 2026-07-16 deep-dive audit (server.js, local-db-client.js, src/aspa/validator.ts) found the flagship ASPA path verification producing wrong results, and a recurring pattern where an upstream API or the local Postgres DB failing would present as "checked, clean" instead of surfacing failure. All fixes in this commit are empirically or textually verified against primary sources (the IETF draft's actual algorithm text, RFC 5735/6890 bogon ranges, and hand-built controlled test cases with known-correct answers) -- not just read-and-guessed. CRITICAL: ASPA hop-check direction was reversed -------------------------------------------------- verifyUpstream/verifyDownstream/detectValleys called hopCheck(collapsed[i-1], collapsed[i]) -- checking the PROVIDER-side AS's ASPA object for the CUSTOMER, the opposite of draft-ietf-sidrops-aspa-verification section 5.3's authorized(A(I), A(I+1)) (A(I) = customer, always checked first). Proven empirically: a hand-built, fully-attested, zero-leak 3-AS path returned "Invalid" before this fix. verifyDownstream needed a full rewrite, not just an argument swap -- a downstream path can legitimately contain both an up-ramp AND a down-ramp (e.g. origin -> providers -> peering point -> validator's providers -> validator), and the old K/L/uMin/vMax computation didn't correctly implement the draft's max_up_ramp/min_up_ramp/max_down_ramp/min_down_ramp four-way computation. Rewrote it from the draft's exact halt conditions, verified against a worked example fetched from the draft itself (an N=4 path with a single unattested "kink" correctly resolves Valid) plus 3 hand-built scenarios (pure up-ramp, mixed up+down clean, and a definite leak with failures on both ends -- Invalid). Same bug existed independently in src/aspa/validator.ts (the MCP-server- side validator, different codebase, same conceptual error) -- validateUpstream was already correct there, but validateDownstream naively reversed the path and reapplied upstream logic, which cannot represent a legitimate down-ramp. Rewrote it with the same four-ramp algorithm, cross-validated against the same test scenarios through the compiled output. Also in the same /api/aspa/verify handler: aspaStore.set(providerAsn, new Set()) for detected-but-unattested providers made hopCheck report "NotProviderPlus" (implying a real ASPA object that denies the hop) instead of "NoAttestation" (we don't know) -- removed; hopCheck's own `!providers` branch already handles the unset case correctly. Also removed a fallback that fabricated an ASPA declaration from heuristically-detected BGP neighbours when aspa_object_exists is false, which contradicted that exact field in the same response. ROOT CAUSE of ~9 broken checks: duplicate function declaration -------------------------------------------------------------- Two `async function fetchRipeStatCached` declarations existed ~150 lines apart (the original real RIPE-Stat-fetch+cache+throttle implementation, and a newer local-DB-routing wrapper added during the Postgres refactor). In JS, the second declaration silently wins for every call site in the file. The wrapper only recognized 5 URL patterns (announced-prefixes, asn-neighbours, as-overview, visibility, prefix-size-distribution) and returned null unconditionally for everything else -- silently breaking blocklist (Spamhaus), abuse-contact-finder, bgp-updates, routing-status, looking-glass, whois, reverse-dns-consistency, maxmind-geo-lite-pfx, and ixs lookups. Renamed the original to fetchRipeStatCachedFromApi and made the wrapper fall through to it instead of returning null. Verified via an isolated routing test (blocklist/abuse-contact-finder URLs now reach the real implementation; the 5 known patterns still route to local DB). Silent-failure / fake-success patterns fixed --------------------------------------------- - local-db-client.js: 5 getRipeStat* functions returned status:'ok' with empty data on Postgres error (fabricated success) -- now status:'error'. server.js's /api/lookup now tracks which sources degraded, surfaces meta.degraded_sources, and caches a degraded result for 90s instead of the full 5min so a DB hiccup doesn't get repeated to every visitor. - validateRPKIWithCache: DB errors and genuine "no covering ROA" both produced status:"not_found" -- split into "not_found" (real) vs "unavailable" (DB error). Updated all 5 call sites that compute RPKI coverage percentages to exclude "unavailable" from the denominator (a DB hiccup must not lower a network's displayed RPKI/ASPA score), and fixed a pre-existing separate typo in the PDF report generator that checked for 'not-found' (hyphen) when the actual value is 'not_found' (underscore). - crossCheckRpki: an empty sample or a failed RIPE-validator lookup both counted as a fabricated 100%/"agreement" instead of being excluded -- now returns agreement_pct:null when nothing was actually compared, and the caller no longer averages null into overall_confidence. Also documented (not silently left) that bgp.he.net fetching is hardcoded off, so the "2-source" prefix/neighbour cross-checks never actually run -- dataQuality.cross_checks now reports sources:1 honestly instead of claiming a cross-check that never happened. - lookupAspaFromRpki: added feedLoaded so a Cloudflare-RPKI-feed fetch failure (rpkiAspaLastFetch never set) is distinguishable from "this ASN genuinely has no ASPA object" -- surfaced as aspa_feed_healthy on both ASPA endpoints. - Bogon/IRR/Spamhaus-blocklist/reverse-DNS/BGP-visibility checks: fetch failure -> empty result -> "pass" (or, for abuse-contact/rdns, a misleading "fail") -- now report "info" (excluded from the weighted health score, matching the existing checkManrsMembership pattern) when the underlying data source didn't actually respond. - Hijack monitoring: checkHijacksForAsn returned [] on DB error, indistinguishable from a genuine zero-prefix result. On a subscription's first monitoring cycle this permanently persisted an empty baseline, silently disabling leak detection forever while the UI kept showing it as active. Now returns null on failure; runHijackCheck skips the cycle entirely (retries next time) instead of locking in a bad baseline. Fixed 2 other call sites that would otherwise crash or persist null onto disk. - WHOIS cache: a transient failure across all 5 RIR sources (RIPE + 4 RDAP endpoints) was cached as "not found in any RIR database" for 24h, identical to a genuinely non-existent ASN. Added a 10min TTL for that specific case instead. - /api/relationships: a neighbourData fetch failure produced "0 upstreams/downstreams/peers", cached unconditionally for 10min. Applied the same 90s-on-suspicious-zero guard the codebase already uses for /api/validate (commit 4cf1673) but never applied here. Verification ------------ node --check on both .js files, tsc --noEmit clean on every touched TS module (remaining errors are 100% pre-existing, in the unrelated mcp-server subsystem), npm run build succeeds, isolated empirical tests for both the ASPA algorithm (3 hand-built scenarios with known-correct answers, cross-checked against draft text fetched live) and the fetchRipeStatCached routing fix, and a full local boot test reaching the exact same pre-existing sandbox-only crash point (missing PEERINGDB_API_KEY, unrelated to this commit) as a baseline boot before any of today's changes. Not deployed to Erik as part of this commit -- server.js and public/index.html there are untouched. --- local-db-client.js | 15 +- server.js | 394 +++++++++++++++++++++++++++++------------- src/aspa/validator.ts | 129 +++++++++++--- 3 files changed, 388 insertions(+), 150 deletions(-) diff --git a/local-db-client.js b/local-db-client.js index 4867458..c3df0e7 100644 --- a/local-db-client.js +++ b/local-db-client.js @@ -72,6 +72,9 @@ async function getAnnouncedPrefixes(asn) { } } +// Returns null on DB error (check could not run) vs [] for a genuine single/no-origin +// result -- a caller treating both as "no hijack" would silently disable hijack +// detection on every transient DB hiccup while still showing the check as clean. async function checkBgpHijack(prefix) { try { const result = await pool.query( @@ -81,7 +84,7 @@ async function checkBgpHijack(prefix) { return result.rows.length > 1 ? result.rows.map(r => r.origin_asn) : []; } catch (error) { console.error('[Local DB] Hijack Check Error:', error.message); - return []; + return null; } } @@ -249,7 +252,7 @@ async function getRipeStatAnnouncedPrefixes(asn) { }; } catch (error) { console.error('[Local RIPE Stat] Announced Prefixes Error:', error.message); - return { status: 'ok', data: { resource: `AS${asn}`, prefixes: [] } }; + return { status: 'error', error: error.message, data: { resource: `AS${asn}`, prefixes: [] } }; } } @@ -275,7 +278,7 @@ async function getRipeStatAsnNeighbours(asn) { }; } catch (error) { console.error('[Local RIPE Stat] ASN Neighbours Error:', error.message); - return { status: 'ok', data: { resource: `AS${asn}`, neighbours: [] } }; + return { status: 'error', error: error.message, data: { resource: `AS${asn}`, neighbours: [] } }; } } @@ -302,7 +305,7 @@ async function getRipeStatAsOverview(asn) { }; } catch (error) { console.error('[Local RIPE Stat] AS Overview Error:', error.message); - return { status: 'ok', data: { resource: `AS${asn}`, announced_prefixes_count: 0 } }; + return { status: 'error', error: error.message, data: { resource: `AS${asn}`, announced_prefixes_count: 0 } }; } } @@ -336,7 +339,7 @@ async function getRipeStatVisibility(asn) { }; } catch (error) { console.error('[Local RIPE Stat] Visibility Error:', error.message); - return { status: 'ok', data: { resource: `AS${asn}`, visibility: {} } }; + return { status: 'error', error: error.message, data: { resource: `AS${asn}`, visibility: {} } }; } } @@ -369,7 +372,7 @@ async function getRipeStatPrefixSizeDistribution(asn) { }; } catch (error) { console.error('[Local RIPE Stat] Prefix Size Distribution Error:', error.message); - return { status: 'ok', data: { resource: `AS${asn}`, ipv4_prefix_size: [] } }; + return { status: 'error', error: error.message, data: { resource: `AS${asn}`, ipv4_prefix_size: [] } }; } } diff --git a/server.js b/server.js index e54e8ff..daf60a8 100644 --- a/server.js +++ b/server.js @@ -369,12 +369,18 @@ async function notifyWebhooks(asn, alert) { } } +// Returns null (not []) when the prefix lookup itself failed -- distinct from a +// genuine zero-prefix result. runHijackCheck must not treat these the same way: +// setting an empty baseline from a transient failure would permanently disable +// hijack detection for that subscription (baseline.size stays 0 forever after, +// so "unexpected" never fires again -- see the baseline.size > 0 guard below). async function checkHijacksForAsn(asn) { try { const data = await localDb.getRipeStatAnnouncedPrefixes(asn); + if (data && data.status === 'error') return null; const prefixes = (data && data.data && data.data.prefixes || []).map(p => p.prefix); return prefixes; - } catch (_) { return []; } + } catch (_) { return null; } } async function runHijackCheck() { @@ -384,6 +390,12 @@ async function runHijackCheck() { let changed = false; for (const sub of subs) { const current = await checkHijacksForAsn(sub.asn); + if (current === null) { + // Lookup failed this cycle -- skip both anomaly detection and baseline + // initialization; retry on the next 30-minute run rather than locking in + // an empty baseline that would silently disable detection forever. + continue; + } const baseline = new Set(sub.prefixes || []); const unexpected = current.filter(p => baseline.size > 0 && !baseline.has(p)); const missing = [...baseline].filter(p => !current.includes(p)); @@ -917,7 +929,7 @@ function buildPdfHtml(data, aspa, format) { const rpkiTotal = rpki.total_checked || rpkiDetails.length || 0; const rpkiValid = rpki.with_roa || rpkiDetails.filter(v => v.status === 'valid').length; const rpkiInvalid = rpkiDetails.filter(v => v.status === 'invalid').length; - const rpkiNotFound = rpkiDetails.filter(v => v.status === 'not-found' || v.status === 'unknown').length; + const rpkiNotFound = rpkiDetails.filter(v => v.status === 'not_found').length; const passedChecks = checks.filter(c => c.status === 'pass').length; const failedChecks = checks.filter(c => c.status !== 'pass' && c.status !== 'info').length; @@ -1552,6 +1564,7 @@ const TIER1_ASNS = new Set([ ]); const CACHE_TTL_LOOKUP = 5 * 60 * 1000; // 5 minutes +const CACHE_TTL_LOOKUP_DEGRADED = 90 * 1000; // matches the existing 90s guard for suspicious /api/validate zero-counts const CACHE_TTL_ASPA = 4 * 60 * 60 * 1000; // 4 hours const CACHE_TTL_NEWS = 10 * 60 * 1000; // 10 minutes const CACHE_TTL_DEFAULT = 5 * 60 * 1000; // 5 minutes @@ -1577,16 +1590,22 @@ function rdapCacheSet(asn, data) { // ============================================================ // WHOIS Cache — 24h TTL, prevents repeated RDAP hammering // ============================================================ -const whoisCache = new Map(); // key: asn string, value: { data, ts } +const whoisCache = new Map(); // key: asn string, value: { data, ts, ttl } const WHOIS_CACHE_TTL = 24 * 60 * 60 * 1000; +// A "not found" result after all 5 RIR sources failed is far more often a shared +// network blip (DNS, outbound connectivity, simultaneous rate-limit) than a real +// ASN existing nowhere across RIPE+APNIC+ARIN+LACNIC+AFRINIC -- fetchJSON can't +// tell timeout/network-error apart from a genuine 404, so cache that specific +// conclusion much more briefly than a confirmed, parsed WHOIS record. +const WHOIS_NOT_FOUND_CACHE_TTL = 10 * 60 * 1000; function whoisCacheGet(asn) { const e = whoisCache.get(String(asn)); - if (e && (Date.now() - e.ts) < WHOIS_CACHE_TTL) return e.data; + if (e && (Date.now() - e.ts) < (e.ttl || WHOIS_CACHE_TTL)) return e.data; return undefined; } -function whoisCacheSet(asn, data) { +function whoisCacheSet(asn, data, ttl) { if (whoisCache.size > 5000) whoisCache.delete(whoisCache.keys().next().value); - whoisCache.set(String(asn), { data, ts: Date.now() }); + whoisCache.set(String(asn), { data, ts: Date.now(), ttl: ttl || WHOIS_CACHE_TTL }); } // ============================================================ @@ -2050,7 +2069,18 @@ class Semaphore { const ripeStatSemaphore = new Semaphore(15); // Cached + throttled RIPE Stat fetch -async function fetchRipeStatCached(url, options) { +// Renamed from fetchRipeStatCached 2026-07-16: a second function with that exact +// name was added ~150 lines down (the local-DB-routing wrapper) during the Postgres +// refactor. In JS, two `function` declarations sharing a name silently collapse to +// the LAST one in source order -- the real RIPE Stat fetch+cache+throttle +// implementation below was completely shadowed, and every call to +// fetchRipeStatCached() for any endpoint NOT in {announced-prefixes, asn-neighbours, +// as-overview, visibility, prefix-size-distribution} was unconditionally returning +// null instead of ever reaching this code. That silently broke blocklist, +// abuse-contact-finder, bgp-updates, routing-status, looking-glass, whois, +// reverse-dns-consistency, maxmind-geo-lite-pfx, and ixs lookups -- see the router's +// fallback call to this function for the fix. +async function fetchRipeStatCachedFromApi(url, options) { // Extract endpoint name from URL for TTL lookup const match = url.match(/\/data\/([^/]+)\//); const endpoint = match ? match[1] : "default"; @@ -2190,14 +2220,19 @@ async function ensureAspaCache() { } } -// Lookup ASPA object for a given ASN from the RPKI feed cache +// Lookup ASPA object for a given ASN from the RPKI feed cache. feedLoaded +// distinguishes "the feed loaded fine and this ASN genuinely has no ASPA object" +// from "the Cloudflare feed fetch has never succeeded, so we don't actually know" -- +// rpkiAspaLastFetch is only set on a successful parse (see fetchRpkiAspaFeed), so +// 0 means every attempt so far has failed and exists:false here is not trustworthy. function lookupAspaFromRpki(asn) { const asnNum = Number(asn); + const feedLoaded = rpkiAspaLastFetch > 0; if (rpkiAspaMap.has(asnNum)) { const providers = rpkiAspaMap.get(asnNum); - return { exists: true, providers: [...providers].sort((a, b) => a - b) }; + return { exists: true, providers: [...providers].sort((a, b) => a - b), feedLoaded }; } - return { exists: false, providers: [] }; + return { exists: false, providers: [], feedLoaded }; } @@ -2430,9 +2465,13 @@ async function fetchRipeStatCached(url, options = {}) { if (asnMatch) return await localDb.getRipeStatPrefixSizeDistribution(parseInt(asnMatch[1])); } - // For other RIPE Stat endpoints (not in localDb): return empty/null gracefully - // Examples: rir-stats-country, bgp-updates, reverse-dns-consistency, routing-status, maxmind-geo-lite, etc. - return Promise.resolve(null); + // For every other RIPE Stat endpoint (not mirrored into the local Postgres DB) -- + // e.g. blocklist, abuse-contact-finder, bgp-updates, routing-status, looking-glass, + // whois, reverse-dns-consistency, maxmind-geo-lite-pfx, ixs -- fall through to the + // real RIPE Stat API with its own cache/throttle/never-cache-null protections, + // instead of returning null unconditionally (see fetchRipeStatCachedFromApi's + // header comment for how this silently broke ~9 checks until 2026-07-16). + return fetchRipeStatCachedFromApi(url, options); } catch (e) { console.error("[fetchRipeStatCached] Error:", e.message); return Promise.resolve(null); @@ -2442,24 +2481,27 @@ async function fetchRipeStatCached(url, options = {}) { // RPKI per-prefix validation — uses local ROA store (instant, no API calls) // Falls back to RIPE Stat only if ROA store is not yet loaded (cold start) // Validate RPKI for a prefix — uses local PostgreSQL database (sub-10ms, zero external API calls) -// Returns: { prefix, status: "valid"|"invalid"|"not_found", validating_roas: N } +// Returns: { prefix, status: "valid"|"invalid"|"not_found"|"unavailable", validating_roas: N } +// "not_found" means the DB was queried and genuinely has no covering ROA -- a real result. +// "unavailable" means the DB query itself failed (connection/timeout/error) -- we don't know. +// Conflating these used to make DB hiccups masquerade as "no ROA published" (a real, worse- +// sounding finding). Callers computing coverage percentages should exclude "unavailable". async function validateRPKIWithCache(asn, prefix) { try { - // Query local database (sub-10ms, no external API calls) const result = await localDb.validateRpki(prefix, asn); - - // Adapt response to match expected format if (result.status === 'valid') { return { prefix, status: "valid", validating_roas: 1 }; } else if (result.status === 'invalid') { return { prefix, status: "invalid", validating_roas: 1 }; + } else if (result.status === 'unknown') { + return { prefix, status: "unavailable", validating_roas: 0 }; } else { - // 'not-found' or 'unknown' + // 'not-found': genuinely no covering ROA return { prefix, status: "not_found", validating_roas: 0 }; } } catch (_e) { console.error("[RPKI] Error validating " + prefix + ":", _e.message); - return { prefix, status: "not_found", validating_roas: 0 }; + return { prefix, status: "unavailable", validating_roas: 0 }; } } @@ -2478,6 +2520,9 @@ function hasAsSet(asPath) { // Hop Check function (core of ASPA verification) // aspaStore = Map> (CAS -> provider set) +// hopCheck(asI, asJ): is asJ an attested provider of CUSTOMER asI? Caller must pass +// the customer first, provider second -- see draft-ietf-sidrops-aspa-verification +// section 5.3's authorized(A(I), A(I+1)), where A(I) is always the customer side. function hopCheck(asI, asJ, aspaStore) { const providers = aspaStore.get(asI); if (!providers) return "NoAttestation"; @@ -2499,7 +2544,9 @@ function verifyUpstream(asPath, aspaStore, rawPathStr) { let hasNoAttestation = false; for (let i = 1; i < collapsed.length; i++) { - const check = hopCheck(collapsed[i - 1], collapsed[i], aspaStore); + // collapsed[i] (closer to origin) is the customer; collapsed[i - 1] (closer to + // the validator) is the provider it's declaring -- customer goes first in hopCheck. + const check = hopCheck(collapsed[i], collapsed[i - 1], aspaStore); hops.push({ from: collapsed[i - 1], to: collapsed[i], @@ -2518,7 +2565,16 @@ function verifyUpstream(asPath, aspaStore, rawPathStr) { }; } -// Downstream Verification (RFC Section 6.2) +// Downstream Verification -- draft-ietf-sidrops-aspa-verification Section 5.5. +// Unlike upstream verification, a downstream path may legitimately contain both +// an up-ramp (customer->provider hops, near the origin) AND a down-ramp +// (provider->customer hops, near the validator), transitioning at most once -- +// e.g. origin -> its providers -> a peering exchange -> validator's providers -> +// validator. Section 5.3 defines four ramp lengths computed from two independent +// scans, verified 2026-07-16 against a worked example fetched from the draft +// (N=4 path with a single unattested/no-attestation "kink" correctly resolves +// to Valid, and a path with definite failures on both ends correctly resolves +// to Invalid, matching this implementation). function verifyDownstream(asPath, aspaStore, rawPathStr) { if (rawPathStr && hasAsSet(rawPathStr)) return { result: "Invalid", reason: "Path contains AS_SET" }; const collapsed = collapsePrepends(asPath); @@ -2530,58 +2586,57 @@ function verifyDownstream(asPath, aspaStore, rawPathStr) { hops.push({ from: collapsed[i - 1], to: collapsed[i], - result: hopCheck(collapsed[i - 1], collapsed[i], aspaStore), + result: hopCheck(collapsed[i], collapsed[i - 1], aspaStore), }); } - // Find u_min: first index where forward hop is NotProviderPlus - let uMin = N + 1; - for (let u = 1; u < N; u++) { - if (hopCheck(collapsed[u - 1], collapsed[u], aspaStore) === "NotProviderPlus") { - uMin = u; - break; - } + // Up-ramp scan: walk from the origin (collapsed[N-1]) toward the validator + // (collapsed[0]), i.e. authorized(A(I), A(I+1)) for I = 1..N-1 ascending. + // maxUpRamp stops at the first DEFINITE violation ("NotProviderPlus"); + // minUpRamp stops at the first hop that isn't confirmed ProviderPlus + // (including unattested "NoAttestation" hops, which don't disprove a leak + // but also don't prove the path is clean). + let maxUpRamp = N; + let minUpRamp = N; + for (let k = N - 1; k >= 1; k--) { + const check = hopCheck(collapsed[k], collapsed[k - 1], aspaStore); + const I = N - k; + if (check === "NotProviderPlus" && maxUpRamp === N) maxUpRamp = I; + if (check !== "ProviderPlus" && minUpRamp === N) minUpRamp = I; + if (maxUpRamp !== N && minUpRamp !== N) break; } - // Find v_max: last index where reverse hop is NotProviderPlus - let vMax = 0; - for (let v = N - 2; v >= 0; v--) { - if (hopCheck(collapsed[v + 1], collapsed[v], aspaStore) === "NotProviderPlus") { - vMax = v; - break; - } + // Down-ramp scan: the mirror image, walking from the validator (collapsed[0]) + // toward the origin, i.e. authorized(A(J), A(J-1)) for J = N..2 descending. + let maxDownRamp = N; + let minDownRamp = N; + for (let k = 0; k <= N - 2; k++) { + const check = hopCheck(collapsed[k], collapsed[k + 1], aspaStore); + const rampLen = k + 1; // = N - J + 1 for the corresponding J + if (check === "NotProviderPlus" && maxDownRamp === N) maxDownRamp = rampLen; + if (check !== "ProviderPlus" && minDownRamp === N) minDownRamp = rampLen; + if (maxDownRamp !== N && minDownRamp !== N) break; } - if (uMin <= vMax) { - return { result: "Invalid", reason: "uMin(" + uMin + ") <= vMax(" + vMax + "): valley detected", hops }; + if (maxUpRamp + maxDownRamp < N) { + return { + result: "Invalid", + reason: "max_up_ramp(" + maxUpRamp + ") + max_down_ramp(" + maxDownRamp + ") < " + N + ": no valid up/down split covers the path", + hops, + }; } - - // Compute up-ramp K - let K = 0; - for (let i = 1; i < N; i++) { - if (hopCheck(collapsed[i - 1], collapsed[i], aspaStore) === "ProviderPlus") { - K = i; - } else { - break; - } + if (minUpRamp + minDownRamp < N) { + return { + result: "Unknown", + reason: "min_up_ramp(" + minUpRamp + ") + min_down_ramp(" + minDownRamp + ") < " + N + ": unattested hops prevent full confirmation", + hops, + }; } - - // Compute down-ramp L - let L = N - 1; - for (let j = N - 2; j >= 0; j--) { - if (hopCheck(collapsed[j + 1], collapsed[j], aspaStore) === "ProviderPlus") { - L = j; - } else { - break; - } - } - - const gap = L - K; - if (gap <= 1) { - return { result: "Valid", reason: "Valid up-down path (K=" + K + ", L=" + L + ")", hops }; - } - - return { result: "Unknown", reason: "Gap between up-ramp and down-ramp (K=" + K + ", L=" + L + ", gap=" + gap + ")", hops }; + return { + result: "Valid", + reason: "max_up_ramp(" + maxUpRamp + ") + max_down_ramp(" + maxDownRamp + ") >= " + N + " and min_up_ramp + min_down_ramp >= " + N, + hops, + }; } // Valley Detection: scan path for up-down-up pattern (route leak indicator) @@ -2688,10 +2743,13 @@ async function fetchRipeRpkiValidator(asn, prefix) { } } -// Cross-check a sample of prefixes against RIPE RPKI Validator (max 5, in parallel) +// Cross-check a sample of prefixes against RIPE RPKI Validator (max 5, in parallel). +// agreement_pct only counts pairs where BOTH sources actually returned a real +// verdict -- a zero-sample or all-RIPE-lookups-failed result reports agreement_pct: +// null (not a fabricated 100), since nothing was actually cross-checked. async function crossCheckRpki(asn, prefixes, localResults) { const sample = prefixes.slice(0, 5); - if (sample.length === 0) return { cloudflare_valid: 0, ripe_valid: 0, agreement_pct: 100, disagreements: [], sample_size: 0 }; + if (sample.length === 0) return { cloudflare_valid: 0, ripe_valid: 0, agreement_pct: null, disagreements: [], sample_size: 0, comparable_size: 0 }; const ripeResults = await Promise.all( sample.map((pfx) => fetchRipeRpkiValidator(asn, pfx)) @@ -2705,6 +2763,7 @@ async function crossCheckRpki(asn, prefixes, localResults) { let cloudflareValid = 0; let ripeValid = 0; let agreements = 0; + let comparable = 0; const disagreements = []; for (let i = 0; i < sample.length; i++) { @@ -2718,12 +2777,13 @@ async function crossCheckRpki(asn, prefixes, localResults) { if (cfIsValid) cloudflareValid++; if (ripeIsValid) ripeValid++; - // Skip comparison if RIPE returned error/unknown + // A failed/unknown RIPE lookup isn't a comparison at all -- exclude it from + // the agreement percentage instead of counting it as a silent "agreement". if (ripeState === "error" || ripeState === "unknown") { - agreements++; // Don't count failed lookups as disagreements continue; } + comparable++; if (cfIsValid === ripeIsValid) { agreements++; } else { @@ -2735,8 +2795,8 @@ async function crossCheckRpki(asn, prefixes, localResults) { } } - const agreementPct = sample.length > 0 ? Math.round((agreements / sample.length) * 100) : 100; - return { cloudflare_valid: cloudflareValid, ripe_valid: ripeValid, agreement_pct: agreementPct, disagreements: disagreements, sample_size: sample.length }; + const agreementPct = comparable > 0 ? Math.round((agreements / comparable) * 100) : null; + return { cloudflare_valid: cloudflareValid, ripe_valid: ripeValid, agreement_pct: agreementPct, disagreements: disagreements, sample_size: sample.length, comparable_size: comparable }; } // ============================================================ @@ -3049,7 +3109,9 @@ async function fetchWhois(resource) { whoisCacheSet(asn, result.data); } else { result.error = "Not found in any RIR database (RIPE, APNIC, ARIN, LACNIC, AFRINIC)"; - whoisCacheSet(asn, null); // cache miss to avoid repeated hammering + // Short TTL: this "not found" likely reflects a transient failure across + // all 5 sources, not a confirmed non-existent ASN -- see WHOIS_NOT_FOUND_CACHE_TTL. + whoisCacheSet(asn, null, WHOIS_NOT_FOUND_CACHE_TTL); } } } else if (/[\/:]/.test(trimmed) || /^\d+\.\d+\.\d+/.test(trimmed)) { @@ -3651,15 +3713,17 @@ const server = http.createServer(async (req, res) => { const aspaObjectExists = aspaLookup.exists; const aspaDeclaredProviders = aspaLookup.providers; - // Build ASPA store from RPKI feed data (real ASPA objects) + // Build ASPA store from RPKI feed data (real ASPA objects only). If the + // target has no real ASPA object, its hops must show "NoAttestation" -- + // NOT a fabricated declaration built from heuristically-detected BGP + // neighbours, which would contradict the aspa_object_exists:false this + // same response reports and falsely present unattested hops as + // "ProviderPlus"/Valid. hopCheck() already returns "NoAttestation" for + // any ASN with no entry in aspaStore, so simply not setting one here is + // correct and sufficient -- no fallback needed. const aspaStore = new Map(); - // Add the target ASN's RPKI-declared providers if (aspaObjectExists) { aspaStore.set(targetAsn, new Set(aspaDeclaredProviders)); - } else { - // Fallback: use detected providers for path verification - const providerSet = new Set(detectedProviders.map((p) => p.asn)); - aspaStore.set(targetAsn, providerSet); } // Also populate store with all known ASPA objects from the RPKI feed // for providers that have their own ASPA objects (enables full path verification) @@ -3668,14 +3732,13 @@ const server = http.createServer(async (req, res) => { aspaStore.set(cas, provSet); } } - - // Also add reverse relationships for providers we know about - // (each provider has the target as customer) - detectedProviders.forEach((p) => { - if (!aspaStore.has(p.asn)) { - aspaStore.set(p.asn, new Set()); - } - }); + // Deliberately NOT adding empty Set() entries for detected-but-unattested + // providers here: aspaStore.get() returning undefined for them makes + // hopCheck() correctly report "NoAttestation". An empty (but present) Set + // would make providers.has(x) return false, misreporting "NotProviderPlus" + // (implying a real ASPA object that denies this hop) instead of "we simply + // don't know" -- see the 2026-07-16 audit for how this previously caused + // clean, unattested paths to be misclassified as route leaks. // Sample paths for verification (up to 50) const samplePaths = allPaths.slice(0, 50); @@ -3754,8 +3817,11 @@ const server = http.createServer(async (req, res) => { await ensureAspaCache(); const rpkiBatch = announcedPrefixes.map((p) => p.prefix); const rpkiResults = await Promise.all(rpkiBatch.map((pfx) => validateRPKIWithCache(rawAsn, pfx))); - const rpkiValid = rpkiResults.filter((r) => r.status === "valid").length; - const rpkiCoverage = rpkiResults.length > 0 ? Math.round((rpkiValid / rpkiResults.length) * 100) : 0; + // Exclude "unavailable" (DB error) from the coverage denominator -- a DB hiccup + // must not lower a network's displayed ASPA readiness score. + const rpkiChecked = rpkiResults.filter((r) => r.status !== "unavailable"); + const rpkiValid = rpkiChecked.filter((r) => r.status === "valid").length; + const rpkiCoverage = rpkiChecked.length > 0 ? Math.round((rpkiValid / rpkiChecked.length) * 100) : 0; // Calculate readiness score const readinessScore = calculateAspaReadinessScore({ @@ -3777,6 +3843,7 @@ const server = http.createServer(async (req, res) => { asn: targetAsn, readiness_score: readinessScore, aspa_object_exists: aspaObjectExists, + aspa_feed_healthy: aspaLookup.feedLoaded, detected_providers: detectedProviders.map((p) => ({ ...p, frequency: providerFrequency.get(p.asn) || 0, @@ -3919,6 +3986,7 @@ const server = http.createServer(async (req, res) => { detected_providers: detectedProviders, provider_count: detectedProviders.length, aspa_object_exists: aspaObjectExists, + aspa_feed_healthy: aspaLookup.feedLoaded, aspa_declared_providers: aspaDeclaredProviders.map((a) => ({ asn: a })), aspa_declared_count: aspaDeclaredProviders.length, recommended_aspa: recommendedAspa, @@ -3977,9 +4045,12 @@ const server = http.createServer(async (req, res) => { last_seen: bgpStatus.last_seen, source: "local_bgp", }; - // Check for hijack (multiple origin ASNs) + // Check for hijack (multiple origin ASNs). null means the check itself + // failed (DB error) -- distinct from a genuine single/no-origin result. const hijackAsns = await localDb.checkBgpHijack(prefix); - if (hijackAsns.length > 1) { + if (hijackAsns === null) { + result.bgp_status.hijack_check_unavailable = true; + } else if (hijackAsns.length > 1) { result.bgp_status.hijack_warning = { detected: true, origin_asns: hijackAsns, @@ -4115,18 +4186,29 @@ const server = http.createServer(async (req, res) => { var bogonPrefixes = bogonPrefixResults.filter(function(r) { return r.is_bogon; }); var asnInPaths = neighbours.map(function(n) { return n.asn; }); var bogonAsns = asnInPaths.filter(checkBogonAsn); + // "pass" must mean prefixes/neighbours were actually fetched and checked clean -- + // not that the upstream RIPE Stat calls failed and left nothing to check. + var bogonDataUnavailable = !prefixData && !neighbourData; var bogonResult = { - status: bogonPrefixes.length === 0 && bogonAsns.length === 0 ? "pass" : "fail", + status: bogonDataUnavailable ? "info" : (bogonPrefixes.length === 0 && bogonAsns.length === 0 ? "pass" : "fail"), bogon_prefixes: bogonPrefixes, bogon_asns_in_paths: bogonAsns, total_prefixes_checked: allPrefixes.length, + prefixes_source_unavailable: !prefixData, + neighbours_source_unavailable: !neighbourData, }; // Phase 2: All API-dependent validations in parallel var validationPromises = {}; // 12. IRR Validation + // fetchJSON resolves(null) on timeout/network-error/parse-failure rather than + // rejecting, so the .catch() below never sees the common failure mode -- a + // dead upstream would otherwise silently read as "0 entries, no mismatches, pass". validationPromises.irr = fetchJSON("https://irrexplorer.nlnog.net/api/prefixes/asn/" + rawAsn).then(function(irrData) { + if (irrData === null) { + return { status: "info", message: "IRR Explorer unavailable (fetch failed)", total_entries: 0, mismatches: [], mismatch_count: 0 }; + } var entries = Array.isArray(irrData) ? irrData : []; var mismatches = entries.filter(function(e) { if (!e.bgpOrigins && !e.bgp_origins) return false; @@ -4152,16 +4234,22 @@ const server = http.createServer(async (req, res) => { validationPromises.rpki_completeness = Promise.all( allPrefixes.map(function(pfx) { return validateRPKIWithCache(rawAsn, pfx); }) ).then(function(rpkiResults) { - var withRoa = rpkiResults.filter(function(r) { return r.status === "valid"; }); - var coverage = rpkiResults.length > 0 ? Math.round((withRoa.length / rpkiResults.length) * 100) : 0; - var overSpecific = rpkiResults.filter(function(r) { + var checkedResults = rpkiResults.filter(function(r) { return r.status !== "unavailable"; }); + var unavailableCount = rpkiResults.length - checkedResults.length; + var withRoa = checkedResults.filter(function(r) { return r.status === "valid"; }); + var coverage = checkedResults.length > 0 ? Math.round((withRoa.length / checkedResults.length) * 100) : 0; + var overSpecific = checkedResults.filter(function(r) { var mask = parseInt((r.prefix || "").split("/")[1] || "0"); return !r.prefix.includes(":") && mask >= 25 && r.status !== "valid"; }); + // If the local RPKI DB was unreachable for every prefix, we haven't actually + // checked anything -- say so instead of reporting a misleading pass/fail. + var allUnavailable = rpkiResults.length > 0 && checkedResults.length === 0; return { - status: coverage >= 90 ? "pass" : coverage >= 50 ? "warning" : "fail", + status: allUnavailable ? "info" : coverage >= 90 ? "pass" : coverage >= 50 ? "warning" : "fail", coverage_pct: coverage, - total_checked: rpkiResults.length, + total_checked: checkedResults.length, + db_unavailable_count: unavailableCount, with_roa: withRoa.length, over_specific: overSpecific.map(function(r) { return r.prefix; }), details: rpkiResults, @@ -4170,6 +4258,7 @@ const server = http.createServer(async (req, res) => { // 14. Abuse Contact Validation validationPromises.abuse_contact = fetchRipeStatCached("https://stat.ripe.net/data/abuse-contact-finder/data.json?resource=AS" + rawAsn).then(function(data) { + if (data === null) return { status: "info", message: "abuse-contact-finder unavailable (fetch failed)", contacts: [], has_valid_email: false }; var contacts = data && data.data && data.data.abuse_contacts ? data.data.abuse_contacts : []; var hasEmail = contacts.length > 0 && contacts.some(function(c) { return c && c.includes("@"); }); return { status: hasEmail ? "pass" : "fail", contacts: contacts, has_valid_email: hasEmail }; @@ -4179,14 +4268,25 @@ const server = http.createServer(async (req, res) => { validationPromises.blocklist = Promise.all( samplePrefixes.slice(0, 5).map(function(pfx) { return fetchRipeStatCached("https://stat.ripe.net/data/blocklist/data.json?resource=" + encodeURIComponent(pfx)).then(function(data) { + // fetchRipeStatCached resolves(null) on timeout/network-error rather than + // throwing, so the .catch() below never sees that case -- distinguish it + // explicitly instead of letting a failed lookup read as "not listed". + if (data === null) return { prefix: pfx, listed: false, checked: false }; var sources = data && data.data && data.data.sources ? data.data.sources : []; var listed = sources.filter(function(s) { return s.prefix_count > 0 || (s.entries && s.entries.length > 0); }); - return { prefix: pfx, listed: listed.length > 0, sources: listed.map(function(s) { return s.source || s.name || "unknown"; }) }; - }).catch(function() { return { prefix: pfx, listed: false, error: true }; }); + return { prefix: pfx, listed: listed.length > 0, checked: true, sources: listed.map(function(s) { return s.source || s.name || "unknown"; }) }; + }).catch(function() { return { prefix: pfx, listed: false, checked: false }; }); }) ).then(function(results) { - var listedPrefixes = results.filter(function(r) { return r.listed; }); - return { status: listedPrefixes.length === 0 ? "pass" : "fail", checked: results.length, listed_prefixes: listedPrefixes }; + var checkedResults = results.filter(function(r) { return r.checked; }); + var listedPrefixes = checkedResults.filter(function(r) { return r.listed; }); + var allUnchecked = results.length > 0 && checkedResults.length === 0; + return { + status: allUnchecked ? "info" : (listedPrefixes.length === 0 ? "pass" : "fail"), + checked: checkedResults.length, + unavailable: results.length - checkedResults.length, + listed_prefixes: listedPrefixes, + }; }).catch(function(e) { return { status: "error", error: String(e) }; }); // 16. MANRS Compliance — scraped from public participants list (24h cache) @@ -4199,6 +4299,7 @@ const server = http.createServer(async (req, res) => { validationPromises.rdns = Promise.all( samplePrefixes.slice(0, rdnsSampleSize).map(function(pfx) { return fetchRipeStatCached("https://stat.ripe.net/data/reverse-dns-consistency/data.json?resource=" + encodeURIComponent(pfx), { timeout: 4000 }).then(function(data) { + if (data === null) return { prefix: pfx, has_rdns: false, details: [], error: true }; var pfxData = data && data.data && data.data.prefixes ? data.data.prefixes : {}; var hasDelegation = false; var details = []; @@ -4226,11 +4327,19 @@ const server = http.createServer(async (req, res) => { }).catch(function() { return { prefix: pfx, has_rdns: false, error: true }; }); }) ).then(function(results) { - var withRdns = results.filter(function(r) { return r.has_rdns; }); - var coverage = results.length > 0 ? Math.round((withRdns.length / results.length) * 100) : 0; - // Include details of what failed - var failedPrefixes = results.filter(function(r) { return !r.has_rdns && !r.error; }).map(function(r) { return r.prefix; }); - return { status: coverage >= 80 ? "pass" : coverage >= 50 ? "warning" : "fail", coverage_pct: coverage, checked: results.length, results: results, failed_prefixes: failedPrefixes }; + var checkedResults = results.filter(function(r) { return !r.error; }); + var withRdns = checkedResults.filter(function(r) { return r.has_rdns; }); + var coverage = checkedResults.length > 0 ? Math.round((withRdns.length / checkedResults.length) * 100) : 0; + var failedPrefixes = checkedResults.filter(function(r) { return !r.has_rdns; }).map(function(r) { return r.prefix; }); + var allUnavailable = results.length > 0 && checkedResults.length === 0; + return { + status: allUnavailable ? "info" : (coverage >= 80 ? "pass" : coverage >= 50 ? "warning" : "fail"), + coverage_pct: coverage, + checked: checkedResults.length, + unavailable: results.length - checkedResults.length, + results: results, + failed_prefixes: failedPrefixes, + }; }).catch(function(e) { return { status: "error", error: String(e) }; }); // 18. BGP Visibility (uses routing-status API which is more reliable than visibility API) @@ -4252,7 +4361,9 @@ const server = http.createServer(async (req, res) => { } return { status: score >= 80 ? "pass" : score >= 50 ? "warning" : "fail", visibility_score: score, total_ris_peers: totalPeers, seen_by: seeingPeers, v4_seeing: v4.ris_peers_seeing || 0, v4_total: v4.total_ris_peers || 0, v6_seeing: v6.ris_peers_seeing || 0, v6_total: v6.total_ris_peers || 0, observed_neighbours: observedNeighbours, source: "bgproutes.io_fallback" }; }).catch(function() { - return { status: "fail", visibility_score: 0, total_ris_peers: 0, seen_by: 0, source: "unavailable" }; + // Neither RIPE routing-status nor the bgproutes.io fallback returned data -- + // this network hasn't actually been measured, not confirmed at 0% visibility. + return { status: "info", message: "visibility could not be measured (both data sources unavailable)", visibility_score: 0, total_ris_peers: 0, seen_by: 0, source: "unavailable" }; }); } return { status: score >= 80 ? "pass" : score >= 50 ? "warning" : "fail", visibility_score: score, total_ris_peers: totalPeers, seen_by: seeingPeers, v4_seeing: v4.ris_peers_seeing || 0, v4_total: v4.total_ris_peers || 0, v6_seeing: v6.ris_peers_seeing || 0, v6_total: v6.total_ris_peers || 0, observed_neighbours: observedNeighbours, source: "ripe_routing_status" }; @@ -4371,8 +4482,10 @@ const server = http.createServer(async (req, res) => { validationPromises.resource_cert = Promise.all( allPrefixes.map(function(pfx) { return validateRPKIWithCache(rawAsn, pfx); }) ).then(function(results) { - var hasRoa = results.some(function(r) { return r.status === "valid" || r.validating_roas > 0; }); - return { status: hasRoa ? "pass" : "fail", has_roas: hasRoa, checked: results.length, roa_count: results.filter(function(r) { return r.status === "valid"; }).length }; + var checked = results.filter(function(r) { return r.status !== "unavailable"; }); + var hasRoa = checked.some(function(r) { return r.status === "valid" || r.validating_roas > 0; }); + var allUnavailable = results.length > 0 && checked.length === 0; + return { status: allUnavailable ? "info" : hasRoa ? "pass" : "fail", has_roas: hasRoa, checked: checked.length, roa_count: checked.filter(function(r) { return r.status === "valid"; }).length }; }).catch(function(e) { return { status: "error", error: String(e) }; }); // Geolocation cross-ref with PeeringDB facilities @@ -4604,6 +4717,16 @@ const server = http.createServer(async (req, res) => { if (!cachedIxlan && ixlanData) pdbSourceCache.set("netixlan", ixCacheKey, ixlanData); if (!cachedFac && facData) pdbSourceCache.set("netfac", String(netId), facData); + // local-db-client's getRipeStat* functions return status:"error" (not "ok") when + // the local Postgres DB query itself failed -- track which sources actually + // failed so we don't cache a DB hiccup's fake-empty result as if it were a + // genuine "this ASN has 0 prefixes" answer for the full 5-minute TTL. + const degradedSources = [ + ["RIPE Stat Prefixes", prefixData], ["RIPE Stat Neighbours", neighbourData], + ["RIPE Stat Overview", overviewData], ["RIPE Stat Visibility", visibilityData], + ["RIPE Stat PrefixSize", prefixSizeData], + ].filter(([, v]) => v && v.status === "error").map(([name]) => name); + const prefixes = prefixData?.data?.prefixes || []; const neighbours = neighbourData?.data?.neighbours || []; const overview = overviewData?.data || {}; @@ -4708,8 +4831,11 @@ const server = http.createServer(async (req, res) => { const rpkiStatuses = rpkiAllResults; const rpkiValid = rpkiStatuses.filter((r) => r.status === "valid").length; const rpkiInvalid = rpkiStatuses.filter((r) => r.status === "invalid").length; - const rpkiNotFound = rpkiStatuses.filter((r) => r.status !== "valid" && r.status !== "invalid").length; - const rpkiTotal = rpkiStatuses.length; + const rpkiUnavailable = rpkiStatuses.filter((r) => r.status === "unavailable").length; + const rpkiNotFound = rpkiStatuses.filter((r) => r.status !== "valid" && r.status !== "invalid" && r.status !== "unavailable").length; + // Exclude "unavailable" (DB error) from the coverage denominator -- a DB hiccup + // must not lower a network's displayed RPKI coverage percentage. + const rpkiTotal = rpkiStatuses.length - rpkiUnavailable; const rpkiCoverage = rpkiTotal > 0 ? Math.round((rpkiValid / rpkiTotal) * 100) : 0; let upstreams = neighbours @@ -4908,7 +5034,7 @@ const server = http.createServer(async (req, res) => { // ============================================================ // Multi-source cross-checks (run in parallel, non-blocking) // ============================================================ - let rpkiCrossCheck = { cloudflare_valid: 0, ripe_valid: 0, agreement_pct: 100, disagreements: [], sample_size: 0 }; + let rpkiCrossCheck = { cloudflare_valid: 0, ripe_valid: 0, agreement_pct: null, disagreements: [], sample_size: 0, comparable_size: 0 }; let prefixCrossCheck = { ripe_stat: prefixes.length, bgp_he_net: null, agreement: null, note: "" }; let neighbourCrossCheck = { ripe_stat_total: neighbours.length, bgp_he_net_total: null }; @@ -4922,6 +5048,13 @@ const server = http.createServer(async (req, res) => { if (rpkiCrossResult) rpkiCrossCheck = rpkiCrossResult; } catch (_e) { /* cross-check failed, keep defaults */ } + // bgp.he.net fetching is deliberately disabled (see the hardcoded + // Promise.resolve(null) a few hundred lines up, "bgp.he.net" timedFetch) -- + // bgpHeData is therefore always null and this whole branch, along with the + // prefix/neighbour cross-checks below, never actually runs. Left in place + // (not deleted) in case bgp.he.net fetching is re-enabled later, but + // overall_confidence below must not claim a 2-source agreement that never + // happened -- see the sources:1/2 handling further down. // Prefix count cross-check: compare RIPE Stat vs bgp.he.net if (bgpHeData) { const heV4 = bgpHeData.prefixes_v4 || 0; @@ -4950,10 +5083,12 @@ const server = http.createServer(async (req, res) => { prefixCrossCheck.note = "bgp.he.net data unavailable"; } - // Compute overall data quality + // Compute overall data quality. Only push a score for a cross-check that + // actually ran (agreement_pct !== null) -- an unrun/inconclusive check must + // not silently count as a perfect 100 in the average, and confidence must + // reflect "nothing was actually cross-checked" rather than defaulting high. const crossCheckScores = []; - // RPKI agreement - crossCheckScores.push(rpkiCrossCheck.agreement_pct); + if (rpkiCrossCheck.agreement_pct !== null) crossCheckScores.push(rpkiCrossCheck.agreement_pct); // Prefix agreement: convert to percentage if (prefixCrossCheck.bgp_he_net != null && prefixes.length > 0) { const pfxRatio = Math.min(prefixes.length, prefixCrossCheck.bgp_he_net) / Math.max(prefixes.length, prefixCrossCheck.bgp_he_net); @@ -4966,15 +5101,15 @@ const server = http.createServer(async (req, res) => { } const avgAgreement = crossCheckScores.length > 0 ? Math.round(crossCheckScores.reduce((a, b) => a + b, 0) / crossCheckScores.length) - : 100; - const overallConfidence = avgAgreement > 90 ? "high" : avgAgreement >= 70 ? "medium" : "low"; + : null; + const overallConfidence = avgAgreement === null ? "unknown" : avgAgreement > 90 ? "high" : avgAgreement >= 70 ? "medium" : "low"; const dataQuality = { sources_queried: ["PeeringDB", "RIPE Stat", "bgp.he.net", "Cloudflare RPKI", "RIPE RPKI Validator"], cross_checks: { - rpki: { sources: 2, agreement_pct: rpkiCrossCheck.agreement_pct, sample_size: rpkiCrossCheck.sample_size, disagreements: rpkiCrossCheck.disagreements }, - prefixes: { sources: 2, agreement_pct: prefixCrossCheck.bgp_he_net != null ? Math.round((Math.min(prefixes.length, prefixCrossCheck.bgp_he_net) / Math.max(prefixes.length, prefixCrossCheck.bgp_he_net || 1)) * 100) : null, ripe_stat: prefixCrossCheck.ripe_stat, bgp_he_net: prefixCrossCheck.bgp_he_net, note: prefixCrossCheck.note }, - neighbours: { sources: 2, agreement_pct: neighbourCrossCheck.bgp_he_net_total != null && neighbours.length > 0 ? Math.round((Math.min(neighbours.length, neighbourCrossCheck.bgp_he_net_total) / Math.max(neighbours.length, neighbourCrossCheck.bgp_he_net_total)) * 100) : null, ripe_stat_total: neighbourCrossCheck.ripe_stat_total, bgp_he_net_total: neighbourCrossCheck.bgp_he_net_total }, + rpki: { sources: rpkiCrossCheck.agreement_pct !== null ? 2 : 1, agreement_pct: rpkiCrossCheck.agreement_pct, sample_size: rpkiCrossCheck.sample_size, comparable_size: rpkiCrossCheck.comparable_size, disagreements: rpkiCrossCheck.disagreements }, + prefixes: { sources: prefixCrossCheck.bgp_he_net != null ? 2 : 1, agreement_pct: prefixCrossCheck.bgp_he_net != null ? Math.round((Math.min(prefixes.length, prefixCrossCheck.bgp_he_net) / Math.max(prefixes.length, prefixCrossCheck.bgp_he_net || 1)) * 100) : null, ripe_stat: prefixCrossCheck.ripe_stat, bgp_he_net: prefixCrossCheck.bgp_he_net, note: prefixCrossCheck.note }, + neighbours: { sources: neighbourCrossCheck.bgp_he_net_total != null ? 2 : 1, agreement_pct: neighbourCrossCheck.bgp_he_net_total != null && neighbours.length > 0 ? Math.round((Math.min(neighbours.length, neighbourCrossCheck.bgp_he_net_total) / Math.max(neighbours.length, neighbourCrossCheck.bgp_he_net_total)) * 100) : null, ripe_stat_total: neighbourCrossCheck.ripe_stat_total, bgp_he_net_total: neighbourCrossCheck.bgp_he_net_total }, }, overall_confidence: overallConfidence, overall_agreement_pct: avgAgreement, @@ -5026,6 +5161,7 @@ const server = http.createServer(async (req, res) => { timestamp: new Date().toISOString(), rpki_prefixes_checked: rpkiTotal, total_prefixes: prefixes.length, + degraded_sources: degradedSources, }, network: { asn: parseInt(asn), @@ -5065,6 +5201,7 @@ const server = http.createServer(async (req, res) => { valid: rpkiValid, invalid: rpkiInvalid, not_found: rpkiNotFound, + unavailable: rpkiUnavailable, checked: rpkiTotal, details: rpkiStatuses, cross_check: rpkiCrossCheck, @@ -5150,7 +5287,9 @@ const server = http.createServer(async (req, res) => { // Update duration to include cross-check time result.meta.duration_ms = Date.now() - start; - cacheSet(cacheKey, result, CACHE_TTL_LOOKUP); + // A DB hiccup shouldn't get cached as this ASN's answer for the full 5min -- + // retry soon instead of repeating a degraded result to every visitor. + cacheSet(cacheKey, result, degradedSources.length > 0 ? CACHE_TTL_LOOKUP_DEGRADED : CACHE_TTL_LOOKUP); res.end(JSON.stringify(result, null, 2)); } catch (err) { const duration = Date.now() - start; @@ -5254,7 +5393,10 @@ const server = http.createServer(async (req, res) => { source_url: "https://stat.ripe.net/data/asn-neighbours/data.json?resource=AS" + rawAsn, }; - cacheSet(cacheKey, result, 10 * 60 * 1000); // 10 min cache + // A neighbourData fetch failure (not a genuine zero-neighbour ASN) would + // otherwise get cached as "0 upstreams/downstreams/peers" for the full 10min -- + // match the existing /api/validate precedent (90s TTL for suspicious zero counts). + cacheSet(cacheKey, result, neighbourData ? 10 * 60 * 1000 : 90 * 1000); res.writeHead(200, { "Content-Type": "application/json" }); return res.end(JSON.stringify(result, null, 2)); } catch (err) { @@ -6045,7 +6187,9 @@ ${html} const hijackSubs = loadHijackSubs(); if (!hijackSubs.find(s => s.asn === asn)) { checkHijacksForAsn(asn).then(prefixes => { - hijackSubs.push({ asn, prefixes, subscribed: new Date().toISOString() }); + // null (lookup failed) becomes [] here so this record's shape stays + // consistent; runHijackCheck retries the real baseline next cycle. + hijackSubs.push({ asn, prefixes: prefixes || [], subscribed: new Date().toISOString() }); saveHijackSubs(hijackSubs); }); } @@ -6160,12 +6304,16 @@ ${html} const exists = subs.find(s => s.asn === asnNum); if (!exists) { const prefixes = await checkHijacksForAsn(asnNum); - subs.push({ asn: asnNum, prefixes, subscribed: new Date().toISOString() }); + // prefixes may be null if the lookup failed just now -- store an empty + // array so this record shape stays consistent; runHijackCheck's own + // "!sub.prefixes.length" check will retry establishing the real + // baseline on its next cycle rather than treating this as permanent. + subs.push({ asn: asnNum, prefixes: prefixes || [], subscribed: new Date().toISOString() }); saveHijackSubs(subs); } const sub = subs.find(s => s.asn === asnNum) || { prefixes: [] }; res.writeHead(200); - res.end(JSON.stringify({ ok: true, asn: asnNum, monitoring: true, prefix_count: sub.prefixes.length })); + res.end(JSON.stringify({ ok: true, asn: asnNum, monitoring: true, prefix_count: (sub.prefixes || []).length })); } catch(e) { res.writeHead(500); res.end(JSON.stringify({error:e.message})); } }); return; diff --git a/src/aspa/validator.ts b/src/aspa/validator.ts index a27e30b..44624b5 100644 --- a/src/aspa/validator.ts +++ b/src/aspa/validator.ts @@ -242,15 +242,22 @@ export function validateUpstream( } /** - * Validate an AS path in the downstream direction per draft-ietf-sidrops-aspa-verification. + * Validate an AS path in the downstream direction per + * draft-ietf-sidrops-aspa-verification Section 5.5. * - * Reverses the path and applies the upstream validation procedure. - * Downstream validation is used when the validating AS is receiving - * a route from a customer rather than a provider. + * Unlike upstream validation, a downstream path may legitimately contain + * BOTH an up-ramp (customer->provider hops near the origin) AND a down-ramp + * (provider->customer hops near the validator), transitioning at most once + * -- e.g. origin -> its providers -> a peering exchange -> validator's + * providers -> validator. A naive "reverse the path and reapply upstream + * validation" does not implement this: it would reject any path with a + * legitimate down-ramp segment. This computes the four ramp lengths the + * draft actually defines (max/min up-ramp, max/min down-ramp) from two + * independent scans and applies the draft's three halt conditions in order. * - * Per draft-ietf-sidrops-aspa-verification, the downstream verification is the mirror image of upstream: - * - Reverse the path so the "origin" from the downstream perspective is leftmost. - * - Apply the same provider-authorization checks. + * Verified 2026-07-16 against a worked example fetched from the draft (an + * N=4 path with a single unattested "kink" resolves to valid; a path with + * definite authorization failures on both ends resolves to invalid). * * @param path - AS path to validate (leftmost = closest to validator) * @param aspaObjects - Map of customer ASN to ASPA object @@ -260,23 +267,103 @@ export function validateDownstream( path: ReadonlyArray, aspaObjects: ReadonlyMap ): ASPAValidationResult { - // Downstream: reverse the path and apply upstream logic. - const reversedPath = [...path].reverse(); - const result = validateUpstream(reversedPath, aspaObjects); + const dedupedPath = deduplicatePath(path); + const N = dedupedPath.length; - // Map violations back to original path positions - const originalLength = deduplicatePath(path).length; - const remappedViolations: ReadonlyArray = result.violations.map( - (v) => ({ - ...v, - position: originalLength - 1 - v.position, - }) - ); + if (N <= 2) { + return { + status: "valid", + path: [...dedupedPath], + violations: [], + leakDetected: false, + confidence: 1.0, + }; + } + + // Up-ramp scan: walk from the origin (index N-1) toward the validator + // (index 0). dedupedPath[k] is the customer, dedupedPath[k-1] the + // provider it's declaring -- authorized(A(I), A(I+1)) in draft terms. + let maxUpRamp = N; + let minUpRamp = N; + let firstUpViolation: { position: number; asn: number; nextHop: number } | undefined; + for (let k = N - 1; k >= 1; k--) { + const check = checkProviderAuthorization(dedupedPath[k], dedupedPath[k - 1], aspaObjects); + const I = N - k; + if (check === "not-provider" && maxUpRamp === N) { + maxUpRamp = I; + firstUpViolation = { position: k, asn: dedupedPath[k], nextHop: dedupedPath[k - 1] }; + } + if (check !== "provider" && minUpRamp === N) minUpRamp = I; + if (maxUpRamp !== N && minUpRamp !== N) break; + } + + // Down-ramp scan: the mirror image, walking from the validator (index 0) + // toward the origin -- authorized(A(J), A(J-1)) in draft terms. + let maxDownRamp = N; + let minDownRamp = N; + let firstDownViolation: { position: number; asn: number; nextHop: number } | undefined; + for (let k = 0; k <= N - 2; k++) { + const check = checkProviderAuthorization(dedupedPath[k], dedupedPath[k + 1], aspaObjects); + const rampLen = k + 1; + if (check === "not-provider" && maxDownRamp === N) { + maxDownRamp = rampLen; + firstDownViolation = { position: k, asn: dedupedPath[k], nextHop: dedupedPath[k + 1] }; + } + if (check !== "provider" && minDownRamp === N) minDownRamp = rampLen; + if (maxDownRamp !== N && minDownRamp !== N) break; + } + + // Confidence: fraction of hops that returned a definitive (non-"no-attestation") result. + const totalHops = N - 1; + let attestedHops = 0; + for (let k = N - 1; k >= 1; k--) { + if (checkProviderAuthorization(dedupedPath[k], dedupedPath[k - 1], aspaObjects) !== "no-attestation") { + attestedHops++; + } + } + const confidence = totalHops > 0 ? attestedHops / totalHops : 1.0; + + if (maxUpRamp + maxDownRamp < N) { + const violation = firstUpViolation ?? firstDownViolation; + const violations: ASPAViolation[] = violation + ? [ + { + position: violation.position, + asn: violation.asn, + expectedProviders: (aspaObjects.get(violation.asn)?.providers ?? []).map((p) => p.asn), + actualNextHop: violation.nextHop, + reason: + `AS${violation.asn} has an ASPA object but does not list AS${violation.nextHop} as an authorized provider. ` + + `No valid up-ramp/down-ramp split covers this path (max_up_ramp=${maxUpRamp}, max_down_ramp=${maxDownRamp}, N=${N}).`, + }, + ] + : []; + return { + status: "invalid", + path: [...dedupedPath], + violations, + leakDetected: true, + leakingAsn: violation?.asn, + confidence, + }; + } + + if (minUpRamp + minDownRamp < N) { + return { + status: "unknown", + path: [...dedupedPath], + violations: [], + leakDetected: false, + confidence, + }; + } return { - ...result, - path: [...deduplicatePath(path)], - violations: remappedViolations, + status: "valid", + path: [...dedupedPath], + violations: [], + leakDetected: false, + confidence, }; } -- 2.43.0 From 0caf7a271ec5043ce60be773a08dedf1cd8f8217 Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 16 Jul 2026 21:39:21 +0200 Subject: [PATCH 06/11] ci: add build-verify workflow + git-pull-based deploy script Two consecutive PeerCortex deploys today (2026-07-16) broke in the same way: server.js requires local files (src/backend/config.js, src/backend/services/smtp.js) that were never actually uploaded to Erik, because the deploy process was ad-hoc 'cat file | ssh' per-file uploads with no systematic check that every require() target actually exists on the target machine. A missing npm dependency (pg) caused the same class of problem separately. - .github/workflows/build-verify.yml: runs on every push/PR (Gitea Actions already has a working runner for this repo, confirmed via the existing .github/workflows/security-scan.yml on the github-import/main branch). npm ci, syntax-checks server.js + the other top-level .js files, verifies every local require() target resolves to an actual file, typechecks (informational for now -- see the step comment for why), builds dist/, runs the existing vitest suite. Catches both of today's failures before they'd ever reach Erik. - deploy-from-git.sh: replaces the per-file upload process with a single git pull + npm ci + require()-check + syntax-check + build + backup + pm2 restart sequence, run manually on Erik. Deliberately NOT wired to a Gitea Action with SSH secrets -- Erik hosts many unrelated production services and main can contain code that hasn't been live-verified yet, so the actual deploy trigger stays a human decision. CI catches what's broken; this makes running the fix a single repeatable command instead of a manually-assembled file list. --- .github/workflows/build-verify.yml | 65 ++++++++++++++++++++++++++++++ deploy-from-git.sh | 61 ++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 .github/workflows/build-verify.yml create mode 100755 deploy-from-git.sh diff --git a/.github/workflows/build-verify.yml b/.github/workflows/build-verify.yml new file mode 100644 index 0000000..7944a62 --- /dev/null +++ b/.github/workflows/build-verify.yml @@ -0,0 +1,65 @@ +name: build-verify + +# Catches the exact class of failure that broke two consecutive PeerCortex +# deploys on 2026-07-16: server.js requiring a local file that was never +# actually committed/uploaded (MODULE_NOT_FOUND crash-loop on Erik), and a +# runtime dependency (pg) missing from package.json/node_modules. Runs on +# every push and PR; does NOT deploy anything -- see deploy.sh / the manual +# Erik deploy process for that. +# +# No untrusted event data (PR titles/bodies/commit messages) is interpolated +# into any run: step below -- nothing here is exposed to injection. + +on: + push: + pull_request: + +permissions: + contents: read + +jobs: + build-verify: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: "22" + + - name: npm ci + run: npm ci + + - name: server.js / local-db-client.js / bio-rd-client.js syntax + run: | + for f in server.js local-db-client.js bio-rd-client.js bgp-hijack-monitor.js magatama-s2ten-bgp-enrichment.js; do + [ -f "$f" ] && node --check "$f" + done + + - name: every local require() target actually exists + run: | + MISSING=0 + for f in server.js local-db-client.js bio-rd-client.js; do + [ -f "$f" ] || continue + for req in $(grep -oE "require\(['\"]\./[^'\"]+['\"]\)" "$f" | sed -E "s/require\(['\"]\.\/([^'\"]+)['\"]\)/\1/"); do + target="$req" + if [ ! -f "$target" ] && [ ! -f "$target.js" ] && [ ! -d "$target" ]; then + echo "::error file=$f::require('./$req') has no matching file (checked $target, $target.js)" + MISSING=1 + fi + done + done + exit $MISSING + + - name: TypeScript typecheck + run: npx tsc --noEmit --pretty false || true + # Non-blocking for now: src/mcp-server/* and src/sources/* have pre-existing + # errors unrelated to the deployed server.js path (see project memory, + # 2026-07-16 audit). Flip to a hard failure once those are cleaned up -- + # until then this step is informational only, visible in the job log. + + - name: build (dist/) + run: npm run build + + - name: vitest + run: npm test diff --git a/deploy-from-git.sh b/deploy-from-git.sh new file mode 100755 index 0000000..cb75b18 --- /dev/null +++ b/deploy-from-git.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# Git-pull-based deploy for Erik. Replaces the ad-hoc per-file `cat file | ssh` +# uploads used on 2026-07-16, which twice missed files that server.js actually +# requires (src/backend/config.js, src/backend/services/smtp.js) because +# uploading was a manual, easy-to-forget step instead of a single `git pull`. +# +# Run this ON Erik, from /opt/peercortex-app. Deliberately manual (not wired +# to a Gitea Action) -- Erik hosts many unrelated production services and +# main can contain code that hasn't been live-tested yet (see project memory). +# +# Usage: ./deploy-from-git.sh [branch] (default: main) + +set -euo pipefail +cd "$(dirname "$0")" + +BRANCH="${1:-main}" +BACKUP_DIR=/opt/_rollbacks/peercortex-app +TS=$(date -u +%Y%m%dT%H%M%SZ) +mkdir -p "$BACKUP_DIR" + +echo "[1/7] Backing up current server.js + public/index.html..." +cp -p server.js "$BACKUP_DIR/server.js.$TS" +cp -p public/index.html "$BACKUP_DIR/index.html.$TS" + +echo "[2/7] Fetching + checking out $BRANCH..." +git fetch origin +git checkout "$BRANCH" +git pull origin "$BRANCH" + +echo "[3/7] npm ci..." +npm ci + +echo "[4/7] Verifying every local require() target actually exists..." +MISSING=0 +for f in server.js local-db-client.js bio-rd-client.js; do + [ -f "$f" ] || continue + for req in $(grep -oE "require\(['\"]\./[^'\"]+['\"]\)" "$f" | sed -E "s/require\(['\"]\.\/([^'\"]+)['\"]\)/\1/"); do + if [ ! -f "$req" ] && [ ! -f "$req.js" ] && [ ! -d "$req" ]; then + echo " MISSING: $f requires ./$req -- not found" >&2 + MISSING=1 + fi + done +done +if [ "$MISSING" = "1" ]; then + echo "Aborting: fix the missing file(s) above before deploying." >&2 + exit 1 +fi + +echo "[5/7] Syntax check..." +node --check server.js +node --check local-db-client.js + +echo "[6/7] Building dist/ (TypeScript API server)..." +npm run build + +echo "[7/7] Restarting peercortex (and peercortex-api if configured)..." +pm2 restart peercortex --update-env +pm2 restart peercortex-api --update-env 2>/dev/null || echo " (peercortex-api not running yet, skipped)" + +echo "" +echo "Done. Rollback: cp $BACKUP_DIR/server.js.$TS server.js && cp $BACKUP_DIR/index.html.$TS public/index.html && pm2 restart peercortex" -- 2.43.0 From b11eed9cf6d3f151cedb49fe0a2afb15bb2b50b6 Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 16 Jul 2026 21:48:37 +0200 Subject: [PATCH 07/11] fix: don't fail build-verify/deploy on pre-existing mcp-server tsc exit code Discovered live on Erik just now: 'npm run build' returns exit code 2 because of pre-existing src/mcp-server/index.ts type errors (unrelated to the server.js/API-server deploy path -- already documented in the 2026-07-16 audit), but with noEmitOnError left at its default (false) it still correctly emits dist/api/index.js, dist/api/server.js, etc. Both build-verify.yml and deploy-from-git.sh were treating that non-zero exit as a hard failure -- the CI run for the previous commit failed on exactly this, and deploy-from-git.sh's would have aborted a real deploy at the same step had I used it instead of manual commands. Now both check for the specific required output files instead of trusting tsc's exit code. --- .github/workflows/build-verify.yml | 19 ++++++++++++++++++- deploy-from-git.sh | 12 +++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-verify.yml b/.github/workflows/build-verify.yml index 7944a62..ae8c15f 100644 --- a/.github/workflows/build-verify.yml +++ b/.github/workflows/build-verify.yml @@ -59,7 +59,24 @@ jobs: # until then this step is informational only, visible in the job log. - name: build (dist/) - run: npm run build + run: | + # tsc exits non-zero because of pre-existing src/mcp-server/* type errors + # (unrelated to the server.js/API-server path this build actually needs -- + # see the typecheck step above), but with noEmitOnError left at its default + # (false) it still emits working output for files that DID typecheck + # cleanly. Confirmed on Erik 2026-07-16: `npm run build` returns exit 2 but + # dist/api/index.js and dist/api/server.js are both present and correct. + # So: don't fail the job on tsc's exit code, fail it only if the specific + # files the deploy actually needs are missing. + npm run build || true + MISSING=0 + for f in dist/api/index.js dist/api/server.js dist/aspa/validator.js; do + if [ ! -f "$f" ]; then + echo "::error::required build output missing: $f" + MISSING=1 + fi + done + exit $MISSING - name: vitest run: npm test diff --git a/deploy-from-git.sh b/deploy-from-git.sh index cb75b18..23c2f1f 100755 --- a/deploy-from-git.sh +++ b/deploy-from-git.sh @@ -51,7 +51,17 @@ node --check server.js node --check local-db-client.js echo "[6/7] Building dist/ (TypeScript API server)..." -npm run build +# tsc exits non-zero on pre-existing src/mcp-server/* errors unrelated to this +# deploy, but still emits working output (default noEmitOnError:false) for +# files that DID typecheck cleanly -- confirmed 2026-07-16. Don't let `set -e` +# abort here; check the files this deploy actually needs instead. +npm run build || true +for f in dist/api/index.js dist/api/server.js dist/aspa/validator.js; do + if [ ! -f "$f" ]; then + echo "Aborting: required build output missing: $f" >&2 + exit 1 + fi +done echo "[7/7] Restarting peercortex (and peercortex-api if configured)..." pm2 restart peercortex --update-env -- 2.43.0 From 140d730b605a88a91a9f88a22436656ec64f9c65 Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 16 Jul 2026 21:56:14 +0200 Subject: [PATCH 08/11] test: fix pdf-export mocks/assertions for the setDefaultTimeout API change The ASPA/silent-failure-audit fix to renderer.ts (page.pdf() has no 'timeout' option in real Playwright; moved to page.setDefaultTimeout() before the call) was only typechecked at the time, never run against the test suite -- the mocks didn't implement setDefaultTimeout and two assertions still expected the old timeout-in-pdf()-options shape. Caught by the new build-verify CI workflow on its first real run. 215/215 tests pass now. --- src/features/pdf-export/__tests__/integration.test.ts | 1 + src/features/pdf-export/__tests__/renderer.test.ts | 11 +++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/features/pdf-export/__tests__/integration.test.ts b/src/features/pdf-export/__tests__/integration.test.ts index f74a779..b36fe3d 100644 --- a/src/features/pdf-export/__tests__/integration.test.ts +++ b/src/features/pdf-export/__tests__/integration.test.ts @@ -9,6 +9,7 @@ import type { Pool } from 'pg' // Mock Playwright for renderer tests vi.mock('playwright', () => { const mockPage = { + setDefaultTimeout: vi.fn(), setContent: vi.fn().mockResolvedValue(undefined), pdf: vi.fn().mockResolvedValue(Buffer.from('pdf binary content')), close: vi.fn().mockResolvedValue(undefined), diff --git a/src/features/pdf-export/__tests__/renderer.test.ts b/src/features/pdf-export/__tests__/renderer.test.ts index 855b96d..025e9df 100644 --- a/src/features/pdf-export/__tests__/renderer.test.ts +++ b/src/features/pdf-export/__tests__/renderer.test.ts @@ -5,6 +5,7 @@ import type { PDFTemplateData } from '../types' // Mock Playwright vi.mock('playwright', () => { const mockPage = { + setDefaultTimeout: vi.fn(), setContent: vi.fn().mockResolvedValue(undefined), pdf: vi.fn().mockResolvedValue(Buffer.from('mock pdf content')), close: vi.fn().mockResolvedValue(undefined), @@ -85,11 +86,13 @@ describe('PDFRenderer', () => { const mockBrowser = await (chromium.launch as any)() const mockPage = await mockBrowser.newPage() + // Playwright's page.pdf() has no `timeout` option -- the timeout is set via + // page.setDefaultTimeout() before the call instead (see renderer.ts). expect(mockPage.pdf).toHaveBeenCalledWith({ format: 'A4', margin: { top: '0', right: '0', bottom: '0', left: '0' }, - timeout: 30000, }) + expect(mockPage.setDefaultTimeout).toHaveBeenCalledWith(30000) }) it('should respect custom timeout', async () => { @@ -102,11 +105,7 @@ describe('PDFRenderer', () => { const mockBrowser = await (chromium.launch as any)() const mockPage = await mockBrowser.newPage() - expect(mockPage.pdf).toHaveBeenCalledWith( - expect.objectContaining({ - timeout: customTimeout, - }) - ) + expect(mockPage.setDefaultTimeout).toHaveBeenCalledWith(customTimeout) }) it('should close page after rendering', async () => { -- 2.43.0 From db83d77162b9f9ef4f3297c96b0034db26a9ee9f Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 16 Jul 2026 22:08:21 +0200 Subject: [PATCH 09/11] ci: constrain vitest to a small fixed fork pool for the CI runner 'npm test' (default vitest thread pool) fails in ~1s on this Gitea Actions runner for no reason reproducible locally (plain run, CI=true, and a fully fresh rm -rf node_modules && npm ci all pass 215/215). Forcing the forks pool with a small fixed worker count (min 1, max 2) is a standard fix for this class of CI-only vitest worker-pool crash. --- .github/workflows/build-verify.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-verify.yml b/.github/workflows/build-verify.yml index ae8c15f..9040611 100644 --- a/.github/workflows/build-verify.yml +++ b/.github/workflows/build-verify.yml @@ -79,4 +79,14 @@ jobs: exit $MISSING - name: vitest - run: npm test + run: npx vitest run --pool=forks --poolOptions.forks.minForks=1 --poolOptions.forks.maxForks=2 --reporter=verbose + # 2026-07-16: `npm test` (plain `vitest run`, default thread pool) fails in + # ~1s on this runner with no visible cause -- passes reliably every way + # tried locally (plain, CI=true, and a fully fresh `rm -rf node_modules && + # npm ci`, all 215/215). A 1s failure with no per-test output strongly + # suggests a worker-pool crash specific to this runner's environment, not + # a real test regression. Forcing the forks pool with a small, fixed + # worker count is a common fix for that class of CI-only vitest failure. + # If this step is STILL red after this change, the failure is a runner + # environment issue outside what can be diagnosed from a local machine -- + # needs someone with actual dashboard/log access to this Gitea instance. -- 2.43.0 From a3ed032687147f8f4461917107365c8a50c71d6e Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 16 Jul 2026 22:12:08 +0200 Subject: [PATCH 10/11] docs: revert speculative vitest pool fix, document as open runner-level issue The forks-pool change didn't fix it (failure went from 1s to 0s, if anything worse) -- reverting to plain 'npm test' since it's no more or less broken and is simpler. Documenting this as a known open item needing someone with actual authenticated Gitea dashboard access, rather than continuing to guess blindly from outside. --- .github/workflows/build-verify.yml | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build-verify.yml b/.github/workflows/build-verify.yml index 9040611..014c5a0 100644 --- a/.github/workflows/build-verify.yml +++ b/.github/workflows/build-verify.yml @@ -79,14 +79,19 @@ jobs: exit $MISSING - name: vitest - run: npx vitest run --pool=forks --poolOptions.forks.minForks=1 --poolOptions.forks.maxForks=2 --reporter=verbose - # 2026-07-16: `npm test` (plain `vitest run`, default thread pool) fails in - # ~1s on this runner with no visible cause -- passes reliably every way - # tried locally (plain, CI=true, and a fully fresh `rm -rf node_modules && - # npm ci`, all 215/215). A 1s failure with no per-test output strongly - # suggests a worker-pool crash specific to this runner's environment, not - # a real test regression. Forcing the forks pool with a small, fixed - # worker count is a common fix for that class of CI-only vitest failure. - # If this step is STILL red after this change, the failure is a runner - # environment issue outside what can be diagnosed from a local machine -- - # needs someone with actual dashboard/log access to this Gitea instance. + run: npm test + # KNOWN OPEN ISSUE (2026-07-16): this step fails in 0-1s on this specific + # Gitea Actions runner for a reason not diagnosable from a local machine -- + # tried forcing a small fixed forks pool (--pool=forks, min/maxForks) as a + # guess (common fix for CI-only vitest worker-pool crashes), made no + # difference. The actual test suite passes 215/215 reliably every way + # tested locally: plain `npm test`, with CI=true set, and after a fully + # fresh `rm -rf node_modules && npm ci`. The job's "Complete job" step + # also shows failure/canRerun:false, which may indicate a runner-level + # issue rather than a test-code issue. Needs someone with actual + # logged-in dashboard access to this Gitea instance to read the real + # step log -- not accessible via this session's tooling (Gitea Actions + # log API returned 404 for every endpoint pattern tried; the web log + # viewer requires an authenticated session to stream content). + # Every OTHER step in this workflow (syntax, require() check, typecheck, + # build) is confirmed working and already caught 2 real bugs today. -- 2.43.0 From 46f96755ac6924362967507c5d5ce3d162198fb3 Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Thu, 16 Jul 2026 22:16:20 +0200 Subject: [PATCH 11/11] fix: bogon check didn't recognize local-db-client status:error as unavailable Follow-up from live testing the 2026-07-16 deploy: bogonDataUnavailable only checked '!prefixData'/'!neighbourData' (falsy/null), but local-db-client.js's DB-error signal is a truthy {status:'error', ...} object, not null (server.js's own fabricated-success fix from earlier today). So when the Postgres-backed prefix/neighbour source is what's actually degraded, this check showed status:'pass' at 0 checked prefixes instead of the more honest 'info' -- data wasn't fabricated (0 was visible), just the status label didn't reflect it. Fixed with an explicit isSourceUnavailable() check for both falsy and status:'error'. --- server.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/server.js b/server.js index daf60a8..3599053 100644 --- a/server.js +++ b/server.js @@ -4187,15 +4187,22 @@ const server = http.createServer(async (req, res) => { var asnInPaths = neighbours.map(function(n) { return n.asn; }); var bogonAsns = asnInPaths.filter(checkBogonAsn); // "pass" must mean prefixes/neighbours were actually fetched and checked clean -- - // not that the upstream RIPE Stat calls failed and left nothing to check. - var bogonDataUnavailable = !prefixData && !neighbourData; + // not that the upstream source failed and left nothing to check. A source is + // unavailable if it's falsy (fetchRipeStatCached network failure) OR if it's a + // truthy object with status:"error" (local-db-client.js's DB-error signal -- + // see the 2026-07-16 audit; that object is NOT null, so a plain `!x` check + // alone misses this case and would show "pass" on 0 checked prefixes). + function isSourceUnavailable(x) { return !x || x.status === "error"; } + var prefixesUnavailable = isSourceUnavailable(prefixData); + var neighboursUnavailable = isSourceUnavailable(neighbourData); + var bogonDataUnavailable = prefixesUnavailable && neighboursUnavailable; var bogonResult = { status: bogonDataUnavailable ? "info" : (bogonPrefixes.length === 0 && bogonAsns.length === 0 ? "pass" : "fail"), bogon_prefixes: bogonPrefixes, bogon_asns_in_paths: bogonAsns, total_prefixes_checked: allPrefixes.length, - prefixes_source_unavailable: !prefixData, - neighbours_source_unavailable: !neighbourData, + prefixes_source_unavailable: prefixesUnavailable, + neighbours_source_unavailable: neighboursUnavailable, }; // Phase 2: All API-dependent validations in parallel -- 2.43.0