Skip to content

About

LACeS: an Open, Fast, Responsible and Efficient Longitudinal Anycast Census System

Topics

Resources

Stars

19 stars

Watchers

1 watching

Forks

Repository files navigation

LACeS Anycast Census

DOI License: MPL 2.0 Website

LACeS: an Open, Fast, Responsible and Efficient Longitudinal Anycast Census System

Contact: remi.hendriks@utwente.nl

Contents

Downloading census data

Available formats

The parquet files in this repository can be downloaded in alternative formats via the manycast.net REST API:

Format Example
.parquet https://manycast.net/api/v1/export/IPv4-latest.parquet
.parquet.gz https://manycast.net/api/v1/export/IPv4-latest.parquet.gz
.csv.gz https://manycast.net/api/v1/export/IPv4-latest.csv.gz
.json.gz https://manycast.net/api/v1/export/IPv4-latest.json.gz

Replace latest with a specific date (e.g., 2026-03-22) to download a historical snapshot. Both IPv4 and IPv6 are available with prefixes IPv4- and IPv6-.

Example:

curl -O https://manycast.net/api/v1/export/IPv4-2026-03-22.csv.gz

See the full API documentation for querying individual prefixes, ASNs, and daily statistics.

LACeS Explorer — interactive web interface

We provide an interactive dashboard for querying, visualizing, and exploring the census data:

Search & lookup. Enter any IP address, prefix, ASN, domain, or TLD to look up anycast status, geolocation of detected PoPs, and related network information. Historical snapshots are available for all census dates since March 21, 2024.

Compare mode. Select two different census dates to track how anycast deployment changed over time.

RIPE Atlas integration. Run the geolocation algorithm on public RIPE Atlas results.

Analytics. Statistics over time, anycast by region, Hilbert curve of anycast space, ...

Using the Python helper

The census_helper.py file provides convenience functions for downloading and filtering the dataset. Requires pandas, pyarrow, and requests.

Basic usage

import census_helper

# Download latest snapshot and filter to high-confidence anycast prefixes
census = census_helper.download_latest("v4")
anycast = census_helper.filter_anycast(census, "v4")

# Or use comprehensive coverage (includes borderline cases)
anycast = census_helper.filter_anycast(census, "v4", confidence="comprehensive")

Command-line usage

python census_helper.py --ip-version v4 --date latest --prefixes-only
python census_helper.py --ip-version v4 --date 2026-03-22 --confidence comprehensive

Understanding the dataset

Data recommendations

Depending on requirements we recommend the following filtering:

High confidence:

(AB > 3) || (GCD > 1)

Comprehensive coverage:

(AB > 1) || (GCD > 1)

Detection methods

The census uses two detection methods:

Anycast-based (AB): Detects anycast using anycast. A prefix is considered anycast if multiple PoPs receive replies. See MAnycast2 for details. Three probe protocols are used: ICMP/ping, TCP SYN/ACK, and DNS/UDP.

  • False positives (FPs): This method is known to produce FPs, especially when the number of receiving PoPs is < 4.

Latency-based (GCD): Detects anycast using latency measurements and Great-Circle-Distance calculations.

  • False negatives (FNs): Highly accurate, but struggles with detecting regional anycast (i.e., anycast deployed within a tight geographic area).

NOTE We provide unicast geolocation results when AB > 1 but GCD == 1. This may help with determining whether AB results are FPs or GCD results are FNs.

Data structure

File paths

Latest files (updated daily):

IPv4-latest.parquet
IPv6-latest.parquet
IPv4-latest.csv
IPv6-latest.csv
stats-latest

Historical files (since March 21, 2024):

YYYY/MM/DD/IPv4.parquet
YYYY/MM/DD/IPv6.parquet
YYYY/MM/DD/IPv4.csv
YYYY/MM/DD/IPv6.csv
YYYY/MM/DD/stats

Columns

Column Description
prefix The candidate anycast prefix: /24 for IPv4 (e.g., 1.0.0.0/24), /48 for IPv6
AB_ICMPv4/v6 Locations found using anycast-based method (ICMP)
AB_TCPv4/v6 Locations found using anycast-based method (TCP SYNACK)
AB_DNSv4/v6 Locations found using anycast-based method (DNS/UDP)
GCD_ICMPv4/v6 Locations found using latency-based method (ICMP)
GCD_TCPv4/v6 Locations found using latency-based method (TCP)
partial Whether partial anycast was detected (IPv4 only)
backing_prefix Corresponding IP routing table prefix (RouteViews)
ASN ASN(s) announcing the prefix (MOASes separated by ;)
locations One entry per geolocated location (see below)

Locations column

Field Description
id GeoNames ID of the city, or NoCity when no candidate city lies within the RTT disc
city City the site is placed in, using iGreedy's algorithm (the most populous candidate)
country_code 2-character country code (ISO 3166-1 alpha-2)
lat City latitude
lon City longitude
candidate_diameter Maximum pairwise distance (km) between surviving candidate cities; smaller values indicate higher precision
num_constraints Number of overlapping discs that refined the candidate set; higher values indicate higher confidence in the result

Note: Geolocation is at airport granularity for dates before 2026-10-03 ( id contains an IATA 3-letter airport code before)

CSV format

Limited data is provided in CSV format for ease of access via GitHub's Web UI:

prefix,number_of_sites,backing_prefix
1.1.1.0/24,67,1.1.1.0/24

Measurement methodology

Targets

Each probe protocol (ICMP, TCP, DNS) has its own hitlist per IP version, with several ranked targets per /24 (IPv4) or /48 (IPv6). We probe the ranked targets of a prefix iteratively, stopping once one responds, to reduce probing costs (see MAnycastR's ranked hitlists). The order of sources below are the order of probing preference.

Source Description ICMPv4 TCPv4 DNSv4 ICMPv6 TCPv6 DNSv6
LACeS feedback loop Anycast targets from earlier censuses, plus Ark full GCD scan targets ✓ ✓ ✓ ✓ ✓ ✓
LACeS responders Addresses that replied to the same protocol in the last 7 daily censuses ✓ ✓ ✓ ✓ ✓ ✓
USC/ISI ANT hitlist Ranked ping-responsive addresses per /24 ✓
OpenINTEL A/AAAA Addresses seen in A/AAAA records ✓ ✓ ✓ ✓
OpenINTEL infra:ns Authoritative name server addresses ✓ ✓
DNS Dependency Graph Authoritative name server addresses (UT DACS, IIJ Labs) ✓ ✓
anycast-prefixes bgp.tools' list of anycast prefixes ✓ ✓ ✓ ✓ ✓ ✓
Public DNS servers Public DNS name servers ✓ ✓
ODNS Open DNS resolvers and forwarders (TU Dresden) ✓
IPv6 Hitlist Responsive addresses: ICMP, UDP/53, TCP/80 and TCP/443 (TUM) ✓ ✓ ✓
IPv6-SRA Ping-responsive router addresses (TU Dresden, HAW Hamburg) ✓ ✓

Hitlists are rebuilt every Sunday. We are happy to share our weekly hitlists on request (remi.hendriks@utwente.nl), provided you have permission from the data sources that require it.

Partial anycast

To minimize daily probing impact, we scan at /24 granularity. However, some prefixes contain mixed unicast and anycast IP addresses (see paper for details) which we detect using multi-target probing.

Running your own census

We make all measurement and analysis tooling publicly available under the MPL 2.0 license:

Measurement tooling

MAnycastR provides implementations for AB and GCD measurements

Geolocation

MiGreedy is our optimized implementation of iGreedy's algorithm for IP geolocation, designed for large-scale production censuses. It supports unicast geolocation, improved detection using intersection, and confidence/accuracy metrics.

Citation

When using this dataset for academic research, please cite the following paper:

@inproceedings{10.1145/3730567.3764484,
  author = {Hendriks, Remi and Luckie, Matthew and Jonker, Mattijs and Sommese, Raffaele and van Rijswijk-Deij, Roland},
  title = {LACeS: an Open, Fast, Responsible and Efficient Longitudinal Anycast Census System},
  year = {2025},
  booktitle = {Proceedings of the 2025 Internet Measurement Conference}
}

About

LACeS: an Open, Fast, Responsible and Efficient Longitudinal Anycast Census System

Topics

Resources

Stars

19 stars

Watchers

1 watching

Forks

Contributors

Languages