ipanalytics/ASNforge

GitHub: ipanalytics/ASNforge

ASNForge 是一个确定性的 ASN 与前缀来源情报本地编译器,将公共注册表与 BGP 数据编译为可复现的 IP 富化制品以供路由分析和安全数据管道使用。

Stars: 1 | Forks: 0

# ASNForge ASNForge 为 IP 富化、路由分析和安全数据管道构建可复现的 ASN 和前缀来源情报制品。它将公共注册表和路由输入编译为紧凑的 IP 到 ASN 的 MaxMind DB、规范化 ASN 表、前缀来源快照、构建元数据、校验和以及可直接发布的归档文件。

ASNForge routing and registry intelligence compiler

CI Release License Go Dataset GitHub Pages

## 最新发布统计 | 字段 | 值 | | --- | ---: | | Build ID | `20260701-075021Z` | | Profile | `public-safe` | | 生成时间 | `2026-07-01T07:50:21Z` | | 质量 | `PASS` | | ASN 配置文件 | 140,513 | | 命名 ASN 配置文件 | 121,150 | | 前缀数 | 1,452,406 | | 插入 MMDB 的前缀数 | 1,452,406 | | MOAS 前缀数 | 13,538 | | 私有 ASN 记录 | 168 | | 保留 ASN 记录 | 28 | | 未知类型 ASN | 126,432 | | 构建耗时(秒) | 64.03 | ## 数据源 | 名称 | URL | 大小 | SHA256 | | --- | --- | ---: | --- | | `afrinic` | [delegated-afrinic-extended-latest](https://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest) | 982,272 | `1e02da7ac3db` | | `apnic` | [delegated-apnic-extended-latest](https://ftp.apnic.net/stats/apnic/delegated-apnic-extended-latest) | 9,156,596 | `2ab04a779bc9` | | `arin` | [delegated-arin-extended-latest](https://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest) | 12,849,474 | `15698d55a6d2` | | `lacnic` | [delegated-lacnic-extended-latest](https://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest) | 4,524,937 | `ba7a148b2804` | | `ripe` | [delegated-ripencc-extended-latest](https://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest) | 17,984,247 | `43ad662346fc` | | `ed2d58969c8c-table.jsonl` | [table.jsonl](https://bgp.tools/table.jsonl) | 74,940,823 | `9b658bede1b8` | | `asn_catalog` | [asns.csv](https://bgp.tools/asns.csv) | 5,527,748 | `532305e1b7bd` | | `asn_signals` | [asn-signals.csv](https://raw.githubusercontent.com/ipanalytics/IP-Knowledge-Layer/main/data/current/asn-signals.csv) | 119 | `f27bb5dba8a1` | | `asn_signals` | [asn-signals.csv](https://raw.githubusercontent.com/ipanalytics/ASN-Signal-Graph/main/data/current/asn-signals.csv) | 608,775 | `968c1cd4c725` | ## 制品 | 制品 | 大小 | 记录数 | | --- | ---: | ---: | | `asnforge-asn.csv.gz` | 2,846,930 | 140,513 | | `asnforge-asn.jsonl.gz` | 3,605,821 | 140,513 | | `asnforge-diff.json` | 224 | - | | `asnforge-prefixes.csv.gz` | 8,892,512 | 1,452,406 | | `asnforge-prefixes.jsonl.gz` | 10,802,416 | 1,452,406 | | `asnforge.mmdb.gz` | 6,111,040 | 1,452,406 | | `manifest.json` | 3,719 | - | | `quality-report.md` | 2,664 | - | ## 数值差异 | 指标 | 值 | | --- | ---: | | `baseline` | true | | `new_asns` | 0 | | `removed_asns` | 0 | | `changed_asn_profiles` | 0 | | `new_prefixes` | 0 | | `removed_prefixes` | 0 | | `changed_prefix_origins` | 0 | | `new_moas_prefixes` | 0 | | `resolved_moas_prefixes` | 0 | ## 质量 无警告或错误。 ## 概述 ASNForge 是一个用于 ASN 配置文件和前缀来源数据集的本地编译器。它专为需要确定性、可检查制品的团队设计,而不是由脚本临时拼装的富化文件。 v0.1 pipeline 接收 RIR delegated stats、bgp.tools 前缀来源和 ASN 目录导出、静态 ipanalytics 信号源、规范化的本地输入以及经过人工筛选的覆盖数据。它输出稳定的 JSONL/CSV 表用于分析和 join,以及一个紧凑的 MaxMind DB 用于对延迟敏感的 IP 富化。 编译器会记录构建标识符、schema 版本、源哈希、制品哈希、质量结果和发布清单,以便可以对多次构建生成的数据进行追踪和比较。 ## 系统行为 ``` RIR delegated stats manual overrides │ │ ▼ ▼ ASN allocation table ── ASN profile normalization │ │ │ ▼ BGP prefix-origin feed ── prefix-origin aggregation ── MOAS policy │ │ ├───────────────┬────┴───────────────┐ ▼ ▼ ▼ ASN JSONL/CSV Prefix JSONL/CSV Compact MMDB ASN -> profile prefix -> origins IP -> ASN profile ``` ASNForge 生成三个相关的制品系列: | 制品 | 访问模式 | 角色 | | --- | --- | --- | | `asnforge.mmdb` | IP 地址 -> 来源 ASN profile | 用于本地富化的以前缀为键的 MaxMind DB | | `asnforge-asn.jsonl` / `.csv` | ASN -> ASN profile | 用于直接 ASN 查找和 join 的规范表 | | `asnforge-prefixes.jsonl` / `.csv` | 前缀 -> 观察到的来源状态 | 包含 MOAS 和收集器状态的前缀来源快照 | ## 功能 - 用于 ASN 分配记录的 RIR delegated extended 解析器。 - 具备收集器感知聚合能力的规范化 BGP 前缀来源 CSV/TSV 解析器。 - 用于生产级前缀来源快照的 bgp.tools 批量表解析器。 - 用于 ASN 名称和粗略来源类别的 bgp.tools ASN 目录解析器。 - 来自 IP-Knowledge-Layer 和 ASN-Signal-Graph 的静态 ASN 信号富化。 - 针对明显 ASN 类别的基于名称的保守分类回退机制。 - 用于精选名称、组织、类型、标签、置信度和字段来源的手动 ASN 覆盖。 - 具有确定性策略的 MOAS 处理:`mark_ambiguous`、`most_observed`、`lowest_asn`。 - 具备 `flag`、`drop` 和 `keep` 策略的私有和保留 ASN 处理。 - 用于 IP 前缀查找的紧凑 MaxMind DB 写入器。 - 具有固定表头和排序记录的稳定 JSONL 和 CSV 输出。 - 包含源哈希、制品哈希、schema 版本、构建 ID 和质量结论的构建元数据。 - 冒烟测试、验证命令、校验和、发布清单和基线差异输出。 - 用于计划任务或标签驱动的制品发布的 GitHub Actions CI 和发布工作流。 ## 快速开始 本地开发环境配置是确定性的,不需要网络访问。 ``` go run ./cmd/asnforge build \ --config config/local-dev.yaml \ --out release/current \ --build-id local-dev go run ./cmd/asnforge validate --out release/current --strict ``` 检查生成的数据: ``` go run ./cmd/asnforge inspect-ip 8.8.8.8 \ --mmdb release/current/asnforge.mmdb \ --format json go run ./cmd/asnforge inspect-asn 15169 \ --asn-table release/current/asnforge-asn.jsonl go run ./cmd/asnforge stats --out release/current --format json ``` ## 安装 从源码构建: ``` git clone https://github.com/ipanalytics/ASNforge.git cd ASNforge go build -o asnforge ./cmd/asnforge ``` 运行编译器: ``` ./asnforge build --config config/local-dev.yaml --out release/current ./asnforge validate --out release/current --strict ``` 要求: | 组件 | 版本 | | --- | --- | | Go | 1.22 或更新版本 | | 操作系统 | Linux、macOS 或任何 Go 支持的环境 | | 网络 | 仅在配置的 HTTP 源下载时需要 | ## CLI ``` asnforge build asnforge download asnforge validate asnforge inspect-ip asnforge inspect-asn asnforge stats asnforge version ``` 常用 flag: | Flag | 默认值 | 描述 | | --- | --- | --- | | `--config` | `config/public-safe.yaml` | 构建配置 | | `--out` | `release/current` | 发布输出目录 | | `--cache` | `data/cache` | 源缓存目录 | | `--build-id` | UTC 时间戳 | 显式构建标识符 | | `--schema-version` | `asnforge.v0.1` | 制品 schema 版本 | | `--private-asn-policy` | 配置值 | `flag`、`drop` 或 `keep` | | `--moas-policy` | 配置值 | `mark_ambiguous`、`most_observed` 或 `lowest_asn` | | `--mmdb` | `/asnforge.mmdb` | 用于构建或检查的 MMDB 路径 | | `--skip-download` | `false` | 使用缓存/本地源文件 | | `--strict` | `false` | 将质量警告视为构建失败 | | `--format` | `text` | 支持的 `text` 或 `json` | ## 输出 成功的构建会写入一个完整的发布目录: ``` release/current/ ├── asnforge.mmdb ├── asnforge.mmdb.gz ├── asnforge-asn.jsonl ├── asnforge-asn.jsonl.gz ├── asnforge-asn.csv ├── asnforge-asn.csv.gz ├── asnforge-prefixes.jsonl ├── asnforge-prefixes.jsonl.gz ├── asnforge-prefixes.csv ├── asnforge-prefixes.csv.gz ├── metadata.json ├── checksums.txt ├── quality-report.md ├── asnforge-diff.json └── manifest.json ``` | 文件 | 描述 | | --- | --- | | `asnforge.mmdb` | 用于 IP -> ASN profile 查找的紧凑 MaxMind DB | | `asnforge-asn.jsonl` | 规范 ASN profile 表 | | `asnforge-asn.csv` | ASN profile 表的 CSV 格式 | | `asnforge-prefixes.jsonl` | 规范前缀来源快照 | | `asnforge-prefixes.csv` | 前缀来源状态的 CSV 格式 | | `metadata.json` | 构建元数据、源哈希、制品哈希、摘要、质量结论 | | `checksums.txt` | 发布制品的 SHA256 校验和 | | `quality-report.md` | 人类可读的构建和质量报告 | | `asnforge-diff.json` | 基线或跨版本发布的差异结构 | | `manifest.json` | 机器可读的制品清单 | ## 数据格式 每个主要记录包含: - `schema_version` - `build_id` 这些字段使 join 操作变得明确,并防止意外混合不兼容的构建。 ### ASN Profile `asnforge-asn.jsonl` 和 `asnforge-asn.csv` 为每个 ASN 包含一行: ``` { "schema_version": "asnforge.v0.1", "build_id": "local-dev", "asn": 15169, "asn_name": "Google LLC", "asn_org": "Google", "asn_type": "cloud", "asn_tags": ["cloud", "dns", "manual-override", "search"], "registration_country": "US", "rir": "arin", "asn_confidence": 100 } ``` `registration_country` 是来自 RIR delegated 数据的注册表分配国家/地区。它不是用户、主机或服务的地理位置。 ### 前缀来源 `asnforge-prefixes.jsonl` 和 `asnforge-prefixes.csv` 保留路由观察状态: ``` { "prefix": "8.8.8.0/24", "origin_asns": [15169], "selected_origin_asn": 15169, "moas": false, "origin_policy": "most_observed", "observation_count": 2, "source_collectors": ["ris-rrc00", "routeviews2"], "prefix_confidence": 90, "rpki_state": "unknown" } ``` ### MMDB 记录 MMDB 以前缀为键,并针对本地 IP 富化进行了优化: ``` { "schema_version": "asnforge.v0.1", "build_id": "local-dev", "asn": 15169, "asn_name": "Google LLC", "asn_org": "Google", "asn_type": "cloud", "asn_tags": ["cloud", "dns", "manual-override", "search"], "registration_country": "US", "rir": "arin", "moas": false, "asn_confidence": 100 } ``` 详细的 MOAS 状态、来源数组、收集器观察结果和字段级的 provenance 属于前缀和 ASN 表。将这些字段排除在 MMDB 之外可以保留数据部分的去重,并使数据库保持紧凑。 ## 操作说明 - 对于相同的输入、配置、schema 版本和构建 ID,构建是确定性的。 - ASN 行按数字 ASN 排序。 - 前缀行按 IP 系列、地址字节和前缀长度排序。 - CSV 列表字段使用分号分隔的稳定排序。 - `metadata.json` 记录源路径、URL、SHA256 哈希、大小、生成时间、制品哈希和质量摘要。 - `validate --strict` 专为 CI 和发布工作流而设计。 ## 源配置文件 | 配置文件 | 用途 | 需要网络 | | --- | --- | --- | | `config/local-dev.yaml` | 确定性开发和 CI fixture 构建 | 否 | | `config/public-safe.yaml` | 使用 RIR delegated 文件、bgp.tools 导出和静态 ipanalytics ASN 信号源的安全发布配置 | 是 | | `config/research-caida.yaml` | 安全源加上可选的 CAIDA ASRank、AS2Org 和 AS 关系批量文件 | 是,加上操作者提供的 CAIDA 文件 | public-safe 配置文件下载 `https://bgp.tools/table.jsonl` 作为生产前缀来源输入,下载 `https://bgp.tools/asns.csv` 作为 ASN 名称和源类别,并从 IP-Knowledge-Layer 和 ASN-Signal-Graph 下载静态原始 CSV 信号导出。`examples/testdata` 下的确定性 fixture 专门针对 `config/local-dev.yaml` 设定。 research CAIDA 配置文件是分开的,因为 CAIDA 数据集有其自身的可接受使用、引用和分发条款。CAIDA 字段被写入 ASN JSONL/CSV 制品中,并被故意排除在紧凑的 MMDB 之外。 默认的 CAIDA 研究输入: | 数据集 | 文件 | | --- | --- | | AS2Org | `https://publicdata.caida.org/datasets/as-organizations/latest.as-org2info.txt.gz` | | AS relationships | 从 `https://publicdata.caida.org/datasets/as-relationships/serial-2/` 解析出的最新 `*.as-rel2.txt.bz2` | | ASRank | 操作者提供的 CSV 路径或 URL;不使用 ASRank API 爬取 | 该代码库包含一个每月/手动的 `release-caida` 工作,用于发布标记为 `research-caida-YYYYMMDD-HHMMSSZ` 的预发布。 默认情况下,v0.1 public-safe 配置文件不包含 CAIDA 数据。可选的 PeeringDB、CAIDA、RPKI 和原生 MRT 支持被追踪为后续的源配置文件和解析器扩展。 ## 使用场景 - 在 SIEM、欺诈、滥用和流量分析系统中进行 IP 富化。 - 在数据仓库和流处理器中进行本地 ASN profile join。 - 用于路由分析和 MOAS 审查的前缀来源快照。 - 为内部安全数据管道提供可复现的发布制品。 - 在构建时验证第三方注册表和路由源的更改。 ## 范围 ASNForge v0.1 专注于 pipeline 形态:解析器、规范化模型、确定性输出、紧凑的 MMDB 生成、元数据、验证和发布自动化。 分类是保守的。`asn_type` 是一种评分操作分类,而不是权威的注册事实。置信度描述了来源的一致性、完整性或观察强度;它不是风险评分。 ## 局限性 - v0.1 中未实现原生 MRT 解析。 - 前缀来源输入是规范化的 CSV/TSV。 - RPKI 状态默认为 `unknown`。 - 没有可选的富化来源,ASN 分类故意保持稀疏。 - 实时路由数据因收集器和收集时间的不同而异。 ## 目录结构 ``` . ├── cmd/asnforge/ # CLI entry point ├── internal/asn/ # ASN models, classification, private/reserved policy ├── internal/bgp/ # Prefix-origin parser and aggregation ├── internal/build/ # Build pipeline, metadata, quality, diff ├── internal/config/ # Config loading and CLI options ├── internal/download/ # Source download, hashing, source state ├── internal/mmdb/ # MaxMind DB writer and inspector ├── internal/output/ # JSONL, CSV, gzip, checksums ├── internal/rir/ # RIR delegated parser ├── internal/smoke/ # Smoke test runner ├── config/ # Build profiles ├── schemas/ # JSON Schemas ├── examples/ # Overrides, smoke cases, deterministic testdata ├── docs/ # Data source and artifact documentation └── .github/workflows/ # CI and release automation ``` ## 部署 发布制品旨在通过 GitHub Releases 发布,而不是提交到代码库。 发布工作流会构建 CLI,运行配置好的 public-safe 构建,验证输出,计算校验和,创建发布 tag,并上传压缩的数据制品以及元数据: ``` ./asnforge build --config config/public-safe.yaml --out release/current ./asnforge validate --out release/current --strict ``` 对于内部部署,在 CI 中运行相同的命令,并将 `release/current/*` 发布到对象存储、包注册表或内部制品仓库。 ## 文档 - [数据源](docs/DATA_SOURCES.md) - [第三方数据](docs/THIRD_PARTY_DATA.md) - [分类](docs/CLASSIFICATION.md) - [MMDB 输出](docs/MMDB_OUTPUT.md) - [发布制品](docs/RELEASE_ARTIFACTS.md) - [置信度](docs/CONFIDENCE.md) ## 许可证 ASNForge 采用 [Apache License 2.0](LICENSE) 授权。 ## 免责声明 ASNForge 汇总注册表和观察到的路由数据,用于防御、分析和操作目的。路由数据是观察性的,可能因收集器和收集时间的不同而有所差异。
标签:ASN, Docker 部署, EVTX分析, Go, IP情报, MaxMind DB, Ruby工具, 日志审计, 时序数据库, 网络运维, 路由分析