2025-10-13-探秘IP与ASN的神秘映射:解锁网络世界的隐藏密码
下面把 可用于「IP 地址 / IPv4 **↔** ASN 的历史映射(数据库)与获取渠道)」 的主流来源、各自特点、常用格式与推荐使用方式列清楚 — 帮你快速上手并能做历史回溯分析(包含如何重建某一时间点的 IP→ASN 映射)。
快速概览(推荐顺序)
- BGP 流与路由汇编(用于构建“历史”IP→ASN 映射)
- 数据源:RouteViews / RIPE RIS(BGP RIBs + 更新)。要做历史映射,这两个项目的归档是必须用的原始材料;解析与批量处理通常用 CAIDA 的 BGPStream / pybgpstream。(bgpstream.caida.org)
- 适合场景:精确复现任意历史时间点(RIB 快照或某段时间的路径/公告)。
- 输出:通过解析 RIB(routing table snapshot)得到 prefix→origin ASN,再做 longest-prefix match 转到具体 IP。(bgpstream.caida.org)
- Team Cymru — 免费 IP→ASN 映射服务 / 下载
- 特点:免费的 IP→ASN 查询服务(WHOIS/TCP43 / DNS / HTTPS),数据基于多个 BGP 源并定期更新(可做批量查)。适合快速离线查或在流水线里做批量映射。(team-cymru.com)
- 商业 / 可下载的 ASN 数据库(带历史/增量选项)
- 代表:IPinfo(ASN DB / ASN API)、WhoisXML / IP-Netblocks 等。提供付费的完整快照、日增量、API 查询、带时间戳的元数据等,适合需要稳定商业级历史记录和 SLA 的场景。(IPinfo)
- MaxMind / GeoLite ASN(和其它地理/ISP 数据)
- 提供 ASN 字段的数据库(GeoIP2/GeoLite2 ASN),可以下载本地化数据库;但若要精细的历史映射,免费 GeoLite 的历史快照有限,商业版和付费产品能更好支持。(MaxMind)
- 免费/开放的小时/日更新数据库
- 例如 IPtoASN、iptoasn.com 这样的项目提供可下载的 IP→ASN 表(TSV),有的提供频繁更新的快照,适合快速取用或做对照。(IPtoASN)
- 工具与库(便于批量/历史分析)
- pybgpstream / BGPStream(CAIDA):从 RouteViews/RIPE RIS 拉取并解析历史 RIB/Updates。(bgpstream.caida.org)
- BGPView / CAIDA 工具集:用于大规模重建与分析。(GitHub)
- 辅助库:
pytricia(前缀查找)、pyasn(建立 prefix→ASN DB)、常用的 CSV/DB 管理工具等。
常见数据格式与交付方式
- RIB / MRT 文件(原始 BGP 归档,需解析):适合最精准的历史再现。来源:RouteViews, RIPE RIS(通过 HTTP/FTP 下载)。(bgpstream.caida.org)
- TSV/CSV 快照(prefix→ASN / IP→ASN):多数商业/免费供应商提供,可直接 join/查询。(IPtoASN)
- MMDB / 二进制(例如 MaxMind):适合实时查找(本地库),但历史快照需另行保存。(MaxMind)
- API(JSON):按需查询(较小规模或做实时系统)。(IPinfo)
如何“重建某一历史时间点”的实操流程(推荐)
- 从 RouteViews / RIPE RIS 下载目标日期的 RIB snapshot(或用 BGP updates + RIB 最终状态)。(bgpstream.caida.org)
- 用 pybgpstream / BGPStream 解析 RIB,得到 prefix → origin ASN(并记录时间戳)。(bgpstream.caida.org)
- 将 prefix 列表载入一个前缀查找数据结构(
pytricia),对要查询的 IPv4 地址做 longest-prefix match 得到历史 origin ASN。 - (可选)把结果与商业 ASN/WHOIS 数据做合并,补全组织名、分配日期、注册信息(来自 IPinfo / MaxMind / WhoisXML)。(IPinfo)
简短示例:用 pybgpstream 获取某日 prefix→ASN(伪代码)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 伪示例(示意)
import pybgpstream
stream = pybgpstream.BGPStream()
# 指定 collector (e.g., route-views) 与时间区间
stream.add_filter('collector', 'route-views.eqix')
stream.add_interval_filter("2023-01-01 00:00:00", "2023-01-01 00:05:00")
stream.add_filter('record-type', 'ribs')
for rec in stream:
for elem in rec:
# elem.fields 包含 prefix, as-path 等
prefix = elem.fields.get('prefix')
as_path = elem.fields.get('as-path')
origin_asn = as_path.split()[-1] if as_path else None
# 存到 CSV/DB
参考 CAIDA BGPStream 文档。(bgpstream.caida.org)
哪些来源可立即下载(快速入口)
- CAIDA / BGPStream 文档与工具(解析历史 BGP 数据的标准工具)。(bgpstream.caida.org)
- Team Cymru(免费 IP→ASN 批量/WHOIS 服务)。(team-cymru.com)
- IPinfo(ASN 数据库、商业快照与 API)。(IPinfo)
- MaxMind GeoLite/GeoIP ASN(下载本地 ASN 数据库)。(MaxMind)
- IPtoASN(免费可下载的 IP→ASN TSV 快照,小时/日更新选项)。(IPtoASN)
选择建议(按需求)
- 想要最高精度的历史重建(任意时间点):用 RouteViews/RIPE RIS + BGPStream(pybgpstream),自己生成 prefix→ASN 快照(可保存为 CSV/MMDB)。(bgpstream.caida.org)
- 想要快速上手 / 批量映射:用 Team Cymru 或 IPtoASN 的 TSV 下载或批量 API。(team-cymru.com)
- 想要稳定商业级数据库 + 增量历史:购买 IPinfo / WhoisXML / MaxMind(商业版) 等产品(提供快照、增量和 SLA)。(IPinfo)
This post is licensed under CC BY 4.0 by the author.