20 个版本
0.6.1 | 2024 年 8 月 6 日 |
---|---|
0.6.0 | 2024 年 6 月 28 日 |
0.5.5 | 2024 年 3 月 29 日 |
0.5.1 | 2023 年 11 月 15 日 |
0.0.5 | 2022 年 7 月 29 日 |
#778 in 网络编程
每月138次下载
120KB
2.5K SLoC
Monocle
用单眼望远镜看穿所有 BGP 数据。
安装
使用 cargo
cargo install monocle
在 macOS 上使用 homebrew
brew install bgpkit/tap/monocle
使用 cargo-binstall
首先安装 cargo-binstall
cargo install cargo-binstall
然后使用 cargo binstall
安装 monocle
cargo binstall monocle
用法
子命令
parse
:解析单个 MRT 文件search
:搜索所有可用公共 MRT 文件中匹配的消息whois
:通过 ASN 或名称搜索 AS 和组织信息country
:查找国家名称和代码的实用程序time
:将 UNIX 时间戳和 RFC3339 字符串之间的时间进行转换rpki
:检查给定 ASNs 或前缀的 RPKI 验证
顶级帮助菜单
➜ ~ monocle
A commandline application to search, parse, and process BGP information in public sources.
Usage: monocle [OPTIONS] <COMMAND>
Commands:
parse Parse individual MRT files given a file path, local or remote
search Search BGP messages from all available public MRT files
whois ASN and organization lookup utility
country ASN and organization lookup utility
time Time conversion utilities
rpki RPKI utilities
help Print this message or the help of the given subcommand(s)
Options:
-c, --config <CONFIG> configuration file path, by default $HOME/.monocle.toml is used
--debug Print debug information
-h, --help Print help
-V, --version Print version
monocle parse
解析给定本地路径或远程 URL 的单个 MRT 文件。
➜ monocle git:(main) ✗ monocle parse --help
Parse individual MRT files given a file path, local or remote
USAGE:
monocle parse [OPTIONS] <FILE>
ARGS:
<FILE> File path to a MRT file, local or remote
OPTIONS:
-a, --as-path <AS_PATH> Filter by AS path regex string
-h, --help Print help information
-j, --peer-ip <PEER_IP> Filter by peer IP address
-J, --peer-asn <PEER_ASN> Filter by peer ASN
--json Output as JSON objects
-m, --elem-type <ELEM_TYPE> Filter by elem type: announce (a) or withdraw (w)
-o, --origin-asn <ORIGIN_ASN> Filter by origin AS Number
-p, --prefix <PREFIX> Filter by network prefix
--pretty Pretty-print JSON output
-s, --include-super Include super-prefix when filtering
-S, --include-sub Include sub-prefix when filtering
-t, --start-ts <START_TS> Filter by start unix timestamp inclusive
-T, --end-ts <END_TS> Filter by end unix timestamp inclusive
-V, --version Print version information
monocle search
在公共 BGP 路由收集器中搜索 BGP 消息,并并行解析相关的 MRT 文件。可以使用更多过滤器来搜索符合您标准的消息。
➜ monocle git:(main) ✗ monocle search --help
Search BGP messages from all available public MRT files
Usage: monocle search [OPTIONS] --start-ts <START_TS> --end-ts <END_TS>
Options:
--dry-run Dry-run, do not download or parse
--json Output as JSON objects
--pretty Pretty-print JSON output
--sqlite-path <SQLITE_PATH> SQLite output file path
--mrt-path <MRT_PATH> MRT output file path
--sqlite-reset SQLite reset database content if exists
-t, --start-ts <START_TS> Filter by start unix timestamp inclusive
-T, --end-ts <END_TS> Filter by end unix timestamp inclusive
-c, --collector <COLLECTOR> Filter by collector, e.g. rrc00 or route-views2
-P, --project <PROJECT> Filter by route collection project, i.e. riperis or routeviews
-o, --origin-asn <ORIGIN_ASN> Filter by origin AS Number
-p, --prefix <PREFIX> Filter by network prefix
-s, --include-super Include super-prefix when filtering
-S, --include-sub Include sub-prefix when filtering
-j, --peer-ip <PEER_IP> Filter by peer IP address
-J, --peer-asn <PEER_ASN> Filter by peer ASN
-m, --elem-type <ELEM_TYPE> Filter by elem type: announce (a) or withdraw (w)
-a, --as-path <AS_PATH> Filter by AS path regex string
-h, --help Print help
-V, --version Print version
monocle time
在 UNIX 时间戳和 RFC3339 时间字符串之间进行转换。
➜ ~ monocle time --help
Time conversion utilities
USAGE:
monocle time [TIME]
ARGS:
<TIME> Time stamp or time string to convert
OPTIONS:
-s, --simple Simple output, only print the converted time
-h, --help Print help information
-V, --version Print version information
示例运行
➜ monocle time
╭────────────┬───────────────────────────┬───────╮
│ unix │ rfc3339 │ human │
├────────────┼───────────────────────────┼───────┤
│ 1659135226 │ 2022-07-29T22:53:46+00:00 │ now │
╰────────────┴───────────────────────────┴───────╯
➜ monocle time 0
╭──────┬───────────────────────────┬──────────────╮
│ unix │ rfc3339 │ human │
├──────┼───────────────────────────┼──────────────┤
│ 0 │ 1970-01-01T00:00:00+00:00 │ 52 years ago │
╰──────┴───────────────────────────┴──────────────╯
➜ monocle time 2022-01-01T00:00:00Z
╭────────────┬───────────────────────────┬──────────────╮
│ unix │ rfc3339 │ human │
├────────────┼───────────────────────────┼──────────────┤
│ 1640995200 │ 2022-01-01T00:00:00+00:00 │ 6 months ago │
╰────────────┴───────────────────────────┴──────────────╯
➜ monocle time 2022-01-01T00:00:00
Input time must be either Unix timestamp or time string compliant with RFC3339
monocle whois
通过 ASN 或组织名称搜索 AS/组织级别的信息。
数据源
- CAIDA AS 组织数据集,http://www.caida.org/data/as-organizations
- 如果您使用此工具进行公开工作,请务必引用上述数据源。
➜ ~ monocle whois --help
ASN and organization lookup utility
Usage: monocle whois [OPTIONS] [QUERY]...
Arguments:
[QUERY]... Search query, an ASN (e.g. "400644") or a name (e.g. "bgpkit")
Options:
-n, --name-only Search AS and Org name only
-a, --asn-only Search by ASN only
-C, --country-only Search by country only
-u, --update Refresh local as2org database
-p, --pretty Output to pretty table, default markdown table
-F, --full-table Display full table (with ord_id, org_size)
-P, --psv Export to pipe-separated values
-f, --full-country Show full country names instead of 2-letter code
-h, --help Print help
-V, --version Print version
示例查询
➜ ~ monocle whois 400644
| asn | as_name | org_name | org_country |
|--------|------------|------------|-------------|
| 400644 | BGPKIT-LLC | BGPKIT LLC | US |
➜ ~ monocle whois bgpkit
| asn | as_name | org_name | org_country |
|--------|------------|------------|-------------|
| 400644 | BGPKIT-LLC | BGPKIT LLC | US |
您可以指定多个查询
➜ monocle whois 13335 bgpkit
| asn | as_name | org_name | org_country |
|--------|---------------|------------------|-------------|
| 13335 | CLOUDFLARENET | Cloudflare, Inc. | US |
| 400644 | BGPKIT-LLC | BGPKIT LLC | US |
使用 --pretty
以美观的圆角表格输出
➜ monocle whois 13335 bgpkit --pretty
╭────────┬───────────────┬──────────────────┬─────────────╮
│ asn │ as_name │ org_name │ org_country │
├────────┼───────────────┼──────────────────┼─────────────┤
│ 13335 │ CLOUDFLARENET │ Cloudflare, Inc. │ US │
│ 400644 │ BGPKIT-LLC │ BGPKIT LLC │ US │
╰────────┴───────────────┴──────────────────┴─────────────╯
monocle country
国家名称和代码查找实用程序。
➜ ~ monocle country --help
Country name and code lookup utilities
Usage: monocle country <QUERY>
Arguments:
<QUERY> Search query, e.g. "US" or "United States"
Options:
-h, --help Print help
-V, --version Print version
示例运行
➜ monocle country US
╭──────┬──────────────────────────╮
│ code │ name │
├──────┼──────────────────────────┤
│ US │ United States of America │
╰──────┴──────────────────────────╯
➜ monocle country united
╭──────┬──────────────────────────────────────────────────────╮
│ code │ name │
├──────┼──────────────────────────────────────────────────────┤
│ TZ │ Tanzania, United Republic of │
│ GB │ United Kingdom of Great Britain and Northern Ireland │
│ AE │ United Arab Emirates │
│ US │ United States of America │
│ UM │ United States Minor Outlying Islands │
╰──────┴──────────────────────────────────────────────────────╯
➜ monocle country "United States"
╭──────┬──────────────────────────────────────╮
│ code │ name │
├──────┼──────────────────────────────────────┤
│ UM │ United States Minor Outlying Islands │
│ US │ United States of America │
╰──────┴──────────────────────────────────────╯
monocle rpki
:
检查给定前缀-ASN 对的 RPKI 有效性,并提供从 RPKI 存档中读取 ROA 和 ASPA 文件的实用程序。
我们使用 Cloudflare RPKI 验证器 作为我们的数据源。
➜ monocle rpki --help
RPKI utilities
Usage: monocle rpki <COMMAND>
Commands:
read-roa parse a RPKI ROA file
read-aspa parse a RPKI ASPA file
check validate a prefix-asn pair with a RPKI validator
list list ROAs by ASN or prefix
summary summarize RPKI status for a list of given ASNs
help Print this message or the help of the given subcommand(s)
单眼镜RPKI检查
检查给定前缀-ASN对的RPKI有效性。我们使用RIPE NCC的routinator实例作为数据源。
➜ monocle rpki check --help
validate a prefix-asn pair with a RPKI validator
Usage: monocle rpki check --asn <ASN> --prefix <PREFIX>
Options:
-a, --asn <ASN>
-p, --prefix <PREFIX>
-h, --help Print help
-V, --version Print version
➜ monocle rpki check --asn 400644 --prefix 2620:AA:A000::/48
RPKI validation result:
| asn | prefix | validity |
|--------|-------------------|----------|
| 400644 | 2620:aa:a000::/48 | valid |
Covering prefixes:
| asn | prefix | max_length |
|--------|-------------------|------------|
| 400644 | 2620:aa:a000::/48 | 48 |
➜ monocle rpki check --asn 400644 --prefix 2620:AA:A000::/49
RPKI validation result:
| asn | prefix | validity |
|--------|-------------------|----------|
| 400644 | 2620:aa:a000::/49 | invalid |
Covering prefixes:
| asn | prefix | max_length |
|--------|-------------------|------------|
| 400644 | 2620:aa:a000::/48 | 48 |
单眼镜RPKI读取-roa
解析给定的RPKI ROA文件,并显示最大长度的前缀-ASN对。
➜ monocle rpki read-roa https://spaces.bgpkit.org/parser/bgpkit.roa
| asn | prefix | max_len |
|--------|-------------------|---------|
| 393949 | 192.67.222.0/24 | 24 |
| 393949 | 192.195.251.0/24 | 24 |
| 393949 | 2620:98:4000::/44 | 48 |
单眼镜RPKI读取-aspa
解析给定的RPKI ASPA文件,并显示允许的上游。
➜ monocle rpki read-aspa https://spaces.bgpkit.org/parser/as945.asa
| asn | afi_limit | allowed_upstream |
|-----|-----------|------------------|
| 945 | none | 1299 |
| | | 6939 |
| | | 7480 |
| | | 32097 |
| | | 50058 |
| | | 61138 |
单眼镜RPKI列表
列出给定ASN或前缀的已签名的ROA。
➜ monocle rpki list 13335
| asn | prefix | max_length |
|-------|---------------------|------------|
| 13335 | 197.234.240.0/22 | 22 |
| 13335 | 197.234.240.0/24 | 24 |
| 13335 | 197.234.241.0/24 | 24 |
| 13335 | 197.234.242.0/24 | 24 |
| 13335 | 197.234.243.0/24 | 24 |
| 13335 | 2c0f:f248::/32 | 32 |
| 13335 | 210.17.44.0/24 | 24 |
| 13335 | 103.22.200.0/23 | 23 |
...
➜ monocle rpki list 1.1.1.0/24
| asn | prefix | max_length |
|-------|------------|------------|
| 13335 | 1.1.1.0/24 | 24 |
单眼镜RPKI摘要
总结给定AS列表的RPKI状态。
➜ monocle rpki summary 701 13335 15169 400644
| asn | signed | routed_valid | routed_invalid | routed_unknown |
|--------|--------|--------------|----------------|----------------|
| 701 | 956 | 890 | 35 | 361 |
| 13335 | 1184 | 1000 | 4 | 221 |
| 15169 | 1372 | 989 | 0 | 5 |
| 400644 | 1 | 0 | 0 | 0 |
注意:由于Cloudflare API当前的限制,每个routed_
类别下的条目最大数量为1000
。
单眼镜雷达
:
使用Cloudflare Radar API和radar-rs
crate查找BGP信息。
使用此命令需要设置CF_API_TOKEN
环境变量。有关获取API令牌的详细步骤,请参阅Cloudflare Radar API入门指南。
monocle radar stats
:路由统计
全球路由概述
➜ monocle radar stats
┌─────────────┬─────────┬──────────┬─────────────────┬───────────────┬─────────────────┐
│ scope │ origins │ prefixes │ rpki_valid │ rpki_invalid │ rpki_unknown │
├─────────────┼─────────┼──────────┼─────────────────┼───────────────┼─────────────────┤
│ global │ 81769 │ 1204488 │ 551831 (45.38%) │ 15652 (1.29%) │ 648462 (53.33%) │
├─────────────┼─────────┼──────────┼─────────────────┼───────────────┼─────────────────┤
│ global ipv4 │ 74990 │ 1001973 │ 448170 (44.35%) │ 11879 (1.18%) │ 550540 (54.48%) │
├─────────────┼─────────┼──────────┼─────────────────┼───────────────┼─────────────────┤
│ global ipv6 │ 31971 │ 202515 │ 103661 (50.48%) │ 3773 (1.84%) │ 97922 (47.68%) │
└─────────────┴─────────┴──────────┴─────────────────┴───────────────┴─────────────────┘
国家级路由概述
➜ monocle radar stats us
┌─────────┬─────────┬──────────┬────────────────┬──────────────┬─────────────────┐
│ scope │ origins │ prefixes │ rpki_valid │ rpki_invalid │ rpki_unknown │
├─────────┼─────────┼──────────┼────────────────┼──────────────┼─────────────────┤
│ us │ 18151 │ 304200 │ 97102 (31.39%) │ 2466 (0.80%) │ 209820 (67.82%) │
├─────────┼─────────┼──────────┼────────────────┼──────────────┼─────────────────┤
│ us ipv4 │ 17867 │ 262022 │ 73846 (27.81%) │ 1042 (0.39%) │ 190689 (71.80%) │
├─────────┼─────────┼──────────┼────────────────┼──────────────┼─────────────────┤
│ us ipv6 │ 4218 │ 42178 │ 23256 (53.08%) │ 1424 (3.25%) │ 19131 (43.67%) │
└─────────┴─────────┴──────────┴────────────────┴──────────────┴─────────────────┘
Data generated at 2023-07-24T16:00:00 UTC.
AS级路由概述
➜ monocle git:(main) ✗ monocle radar stats 174
┌────────────┬─────────┬──────────┬─────────────┬──────────────┬───────────────┐
│ scope │ origins │ prefixes │ rpki_valid │ rpki_invalid │ rpki_unknown │
├────────────┼─────────┼──────────┼─────────────┼──────────────┼───────────────┤
│ as174 │ 1 │ 4425 │ 216 (4.88%) │ 15 (0.34%) │ 4194 (94.78%) │
├────────────┼─────────┼──────────┼─────────────┼──────────────┼───────────────┤
│ as174 ipv4 │ 1 │ 3684 │ 201 (5.46%) │ 9 (0.24%) │ 3474 (94.30%) │
├────────────┼─────────┼──────────┼─────────────┼──────────────┼───────────────┤
│ as174 ipv6 │ 1 │ 741 │ 15 (2.02%) │ 6 (0.81%) │ 720 (97.17%) │
└────────────┴─────────┴──────────┴─────────────┴──────────────┴───────────────┘
Data generated at 2023-07-24T16:00:00 UTC.
monocle radar pfx2asn
:前缀到ASN映射
查找给定前缀的源前缀(例如使用Cloudflare 1.1.1.0/24
作为示例)
➜ monocle radar pfx2as 1.1.1.0/24
┌────────────┬─────────┬───────┬───────────────┐
│ prefix │ origin │ rpki │ visibility │
├────────────┼─────────┼───────┼───────────────┤
│ 1.1.1.0/24 │ as13335 │ valid │ high (98.78%) │
└────────────┴─────────┴───────┴───────────────┘
查找由给定AS产生的源前缀(例如使用BGPKIT AS400644作为示例)
➜ monocle radar pfx2as 400644
┌───────────────────┬──────────┬───────┬───────────────┐
│ prefix │ origin │ rpki │ visibility │
├───────────────────┼──────────┼───────┼───────────────┤
│ 2620:aa:a000::/48 │ as400644 │ valid │ high (93.90%) │
└───────────────────┴──────────┴───────┴───────────────┘
Data generated at 2023-07-24T16:00:00 UTC.
查找由给定AS产生的RPKI无效(带有标志--rpki-status invalid
)的前缀
➜ monocle radar pfx2as 174 --rpki-status invalid
┌─────────────────────┬────────┬─────────┬──────────────┐
│ prefix │ origin │ rpki │ visibility │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 2606:d640::/40 │ as174 │ invalid │ low (7.32%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 194.76.218.0/24 │ as174 │ invalid │ mid (29.27%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 154.81.223.0/24 │ as174 │ invalid │ mid (31.71%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 178.171.100.0/24 │ as174 │ invalid │ low (10.98%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 212.69.135.0/24 │ as174 │ invalid │ low (10.98%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 2602:fd92:900::/40 │ as174 │ invalid │ mid (23.17%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 2606:d640:a000::/36 │ as174 │ invalid │ mid (23.17%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 2606:d640:11::/48 │ as174 │ invalid │ mid (23.17%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 172.83.86.0/23 │ as174 │ invalid │ low (13.41%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 2606:d640:100::/40 │ as174 │ invalid │ low (7.32%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 154.93.28.0/24 │ as174 │ invalid │ mid (31.71%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 2606:d640:200::/40 │ as174 │ invalid │ low (7.32%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 173.0.3.0/24 │ as174 │ invalid │ mid (31.71%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 138.34.56.0/22 │ as174 │ invalid │ mid (31.71%) │
├─────────────────────┼────────┼─────────┼──────────────┤
│ 67.159.59.0/24 │ as174 │ invalid │ mid (31.71%) │
└─────────────────────┴────────┴─────────┴──────────────┘
Data generated at 2023-07-24T16:00:00 UTC.
由BGPKIT团队用❤️构建
依赖项
~41–56MB
~1M SLoC