When I rewrote the ASN lookup in Node, I didn't delete the old one. The original PHP app moved to asn-legacy.ipinfo.app and kept running as a preserved snapshot, mostly so the handful of endpoints the rewrite dropped would still have a home.

Today I'm switching it off.


What it was holding on to

The Node rewrite kept the API compatible, with one exception: anything tied to the old historical data model. Those paths have been answering 410 Gone on asn.ipinfo.app since the rewrite, with a note pointing at asn-legacy:

  • /api/json/archive and /api/json/archiveRaw: the prefixes an ASN announced at a past point in time
  • /api/json/snapshots: the list of points in time you could ask about
  • /api/json/growth and /api/json/growthSplit: prefix counts over time
  • /api/json/peersv4/v6, directPeersv4/v6, peerWordlistv4/v6: peer lists

Behind all of that was a 4-node CockroachDB cluster and a weekly PHP job that called RIPEstat once for every ASN on the internet. That's about 100,000 API calls per run, taking four to eight hours each week, all so you could ask what an ASN announced on some Tuesday in 2017.

The archive went back to August 2014: roughly 895,000 distinct prefix-set snapshots across about 136,000 ASNs. That number sounds more impressive than the data was. Before 2018 the coverage is patchy, with gaps of weeks or months depending on what the scraper managed to finish.

Nobody was really using it

Over the last 30 days the retired endpoints on asn.ipinfo.app saw about 170 requests from actual people, so a handful a day. Only four of those were for the archive. The rest were mostly peer lookups, and that data now has a better home (more on that below).

Keeping a database cluster and a weekly 100k-call job alive for four archive requests a month is hard to justify. It's also not great manners toward RIPEstat.

The history isn't gone

Retiring the app doesn't mean throwing the data away. Before I shut anything down, I exported the full archive, checked it against the source, and archived it privately in a cleaner, Postgres-ready format. If I ever want twelve years of my own snapshots back, they're a restore away. They just don't need a live cluster.

If you need historical routing data today, use these. They're better than what I had:

  • CAIDA RouteViews prefix2as: daily prefix-to-AS mappings built from RouteViews, IPv4 since 2005 and IPv6 since 2007. That's deeper and more consistent than my archive ever was.
  • RIPEstat routing history: per-ASN or per-prefix announcement history from RIPE RIS, queryable over an API. It's the same source my weekly job was pulling from.

Where the live features went

Everything that's still useful lives in two places now:

  • asn.ipinfo.app: ASN and prefix lookup, search, and block lists in whatever format your firewall wants (iptables, ipset, nginx, Cisco, Juniper and so on), generated on demand. Each ASN page also has a Peering & Transit card showing the networks seen next to it in observed BGP paths, built from current routing data instead of a weekly scrape.
  • asn.dev: deeper per-ASN pages. asn.dev/AS<n>/peers breaks out upstream transit providers, downstream networks and other adjacent ASes, /AS<n>/space lists announced prefixes, and /AS<n>/graph draws who carries a network all the way up to the transit-free core.

If you were calling the old peers* endpoints, the Peering pages are where to go. They aren't a drop-in replacement, since the data comes from a different source and has a different shape, but they answer the same question with better data.

Every asn-legacy.ipinfo.app URL now redirects permanently to this post. If you landed here from a bookmark or a script, the sections above should point you somewhere useful.

Signing off

asn-legacy was the PHP app that grew out of enjen.net/asn-blocklist/ and ran the ASN lookup for over a decade. It got a quiet retirement after the rewrite, and now it gets a proper send-off. Its data is safe, its jobs went to better tools, and the cluster can finally be turned off.