
Longitudinal anycast census system that probes IPv4/IPv6 prefixes via ICMP, TCP, and DNS to detect anycast deployments and geolocate PoPs, publishing daily datasets and an API.
LACeS: an Open, Fast, Responsible and Efficient Longitudinal Anycast Census System
Contact: [email protected]
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.
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, ...
The census_helper.py file provides convenience functions for downloading and filtering the dataset. Requires pandas, pyarrow, and requests.
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")
python census_helper.py --ip-version v4 --date latest --prefixes-only
python census_helper.py --ip-version v4 --date 2026-03-22 --confidence comprehensive
Depending on requirements we recommend the following filtering:
High confidence:
(AB > 3) || (GCD > 1)
Comprehensive coverage:
(AB > 1) || (GCD > 1)
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.
Latency-based (GCD): Detects anycast using latency measurements and Great-Circle-Distance calculations.
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.
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
| 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) |
| 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)
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
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.