
Sistema de censo anycast longitudinal que sonda prefixos IPv4/IPv6 via ICMP, TCP e DNS para detectar implantações anycast e geolocalizar PoPs, publicando conjuntos de dados diários e uma API.
LACeS: um Sistema de Censo Anycast Longitudinal Aberto, Rápido, Responsável e Eficiente
Contato: [email protected]
Os arquivos parquet neste repositório podem ser baixados em formatos alternativos através da API REST do manycast.net:
| Formato | Exemplo |
|---|---|
.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 |
Substitua latest por uma data específica (por exemplo, 2026-03-22) para baixar um snapshot histórico. Tanto IPv4 quanto IPv6 estão disponíveis com os prefixos IPv4- e IPv6-.
Exemplo:
curl -O https://manycast.net/api/v1/export/IPv4-2026-03-22.csv.gz
Consulte a documentação completa da API para consultar prefixos individuais, ASNs e estatísticas diárias.
Fornecemos um painel interativo para consultar, visualizar e explorar os dados do censo:
Pesquisa e consulta. Insira qualquer endereço IP, prefixo, ASN, domínio ou TLD para consultar o status anycast, a geolocalização dos PoPs detectados e informações de rede relacionadas. Snapshots históricos estão disponíveis para todas as datas de censo desde 21 de março de 2024.
Modo de comparação. Selecione duas datas de censo diferentes para acompanhar como a implantação anycast mudou ao longo do tempo.
Integração com o RIPE Atlas. Execute o algoritmo de geolocalização em resultados públicos do RIPE Atlas.
Análises. Estatísticas ao longo do tempo, anycast por região, curva de Hilbert do espaço anycast, ...
O arquivo census_helper.py fornece funções de conveniência para baixar e filtrar o conjunto de dados. Requer pandas, pyarrow e 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
Dependendo dos requisitos, recomendamos a seguinte filtragem:
Alta confiança:
(AB > 3) || (GCD > 1)
Cobertura abrangente:
(AB > 1) || (GCD > 1)
O censo utiliza dois métodos de detecção:
Baseado em Anycast (AB): Detecta anycast usando anycast. Um prefixo é considerado anycast se múltiplos PoPs receberem respostas. Consulte MAnycast2 para detalhes. Três protocolos de sondagem são utilizados: ICMP/ping, TCP SYN/ACK e DNS/UDP.
Baseado em latência (GCD): Detecta anycast usando medições de latência e cálculos de Great-Circle-Distance.
NOTA Fornecemos resultados de geolocalização unicast quando AB > 1 mas GCD == 1. Isso pode ajudar a determinar se os resultados de AB são FPs ou se os resultados de GCD são FNs.
Arquivos mais recentes (atualizados diariamente):
IPv4-latest.parquet
IPv6-latest.parquet
routed-prefixes-IPv4-latest.csv
routed-prefixes-IPv6-latest.csv
stats-latest
Arquivos históricos (desde 21 de março de 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
| Coluna | Descrição |
|---|---|
prefix | O prefixo anycast candidato: /24 para IPv4 (por exemplo, 1.0.0.0/24), /48 para IPv6 |
AB_ICMPv4/v6 | Locais encontrados usando o método baseado em anycast (ICMP) |
AB_TCPv4/v6 | Locais encontrados usando o método baseado em anycast (TCP SYNACK) |
AB_DNSv4/v6 | Locais encontrados usando o método baseado em anycast (DNS/UDP) |
GCD_ICMPv4/v6 | Locais encontrados usando o método baseado em latência (ICMP) |
GCD_TCPv4/v6 | Locais encontrados usando o método baseado em latência (TCP) |
partial | Se anycast parcial foi detetado (apenas IPv4) |
backing_prefix | Prefixo correspondente da tabela de encaminhamento IP (RouteViews) |
ASN | ASN(s) que anunciam o prefixo (MOASes separados por ;) |
locations | Uma entrada por local geolocalizado (ver abaixo) |
| Campo | Descrição |
|---|---|
id | ID GeoNames da cidade, ou NoCity quando nenhuma cidade candidata se encontra dentro do disco RTT |
city | Cidade onde o site é colocado, usando o algoritmo do iGreedy (a candidata mais populosa) |
country_code | Código de país de 2 caracteres (ISO 3166-1 alpha-2) |
lat | Latitude da cidade |
lon | Longitude da cidade |
candidate_diameter | Distância máxima entre pares (km) entre as cidades candidatas sobreviventes; valores menores indicam maior precisão |
num_constraints | Número de discos sobrepostos que refinaram o conjunto de candidatas; valores mais altos indicam maior confiança no resultado |
Nota: A geolocalização é à granularidade de aeroporto para datas anteriores a 2026-10-03 ( id contém um código de aeroporto IATA de 3 letras antes)
Publicamos routed-prefixes-IPv*.csv que contém:
prefix,asn
4.144.0.0/12,8075
Este arquivo contém todos os prefixos da tabela de roteamento IP nos quais detectamos anycast com alta confiança (ou seja, a coluna backing_prefix no .parquet).
Fornecemos este arquivo pois isso permite uma análise fácil usando prefixos roteados e é facilmente acessível através da interface web do GitHub.
Além disso, simplifica a análise conjunta usando a lista do bgp.tools (que classifica anycast com base no prefixo roteado) para aqueles que usam nosso conjunto de dados em combinação com o deles.
Observamos que um backing_prefix pode conter uma mistura de endereços unicast e anycast (ver artigo para detalhes).
Assumir que todo o backing_prefix é anycast leva a muitos FPs, especialmente para os prefixos maiores (até /8 para IPv4).
Nossa recomendação é avaliar endereços anycast usando os blocos /24, /48 no arquivo .parquet.