cbuijs/aggrip

GitHub: cbuijs/aggrip

一套高性能命令行工具,用于聚合、分类、排序与去重 IP、CIDR 和域名。

Stars: 7 | Forks: 0

# Aggrip - IP、CIDR 和 DNS 域实用工具 一组高度优化的 Python 3 命令行工具,用于处理、聚合和排序 IP 地址、CIDR 网络和 DNS 域名列表。这些工具专为 Unix 类环境中的高性能管道操作而设计。 ## INTRO 我曾多年担任网络与安全顾问,每天“吞下”数据和迁移。奇怪的是,这种疯狂渗透到了我的爱好中。作为一个地道的荷兰极客,捣鼓“DNS”是我在慵懒周日下午真正喜欢做的事情……没错,真的如此! 为了在与工作中各种奇怪边缘案例保持理智,我编写了这些脚本来支持我的家庭实验室(说实话,它们在工作中也依然救我狗命)。最终成果就是这套用于 grep、分类、聚合和排序 IP、CIDR 和域名的高度优化工具集。 只需 `cat` 一些混乱的数据并通过管道连接它们,尽情玩耍吧。记住……永远都是 DNS!(当然还有任何 TCP/IP 的东西)。 ## 工具概览 ### 分类与分析工具 * **`categorize.py`** 将混合输入的 IP、CIDR 和域名流分类到高度特定的逻辑区段。 * **IP/CIDR:** 支持高级 RFC 定义(例如 Carrier-Grade NAT、多播、链路本地、Class E)、特殊用途 IP 地址和标准 BOGON 映射。原生将反向 DNS(`.arpa`)指针解码回其真实的 IP 表示形式以实现准确路由。 * **域名:** 支持特殊用途域名 RFC、ccTLD 国家映射、eTLD 启发式、Web3/加密域名以及 WPAD 检测。 * **启发式:** 基于首标签分析,实现对广告和追踪器子域的快速路径正则检测。 * **格式化:** 默认严格丢弃无效垃圾文本。输出按默认分组并按字母/IP 排序。支持 `-i` / `--inline` 标志将输出扁平化,并以行内注释形式附加具体的 RFC/分类名称。 * **`categorize2.py`** 执行与 `categorize.py` 完全相同的深度分类、RFC 映射和启发式扫描,但使用高速批量内存读取、快速路径文本跳过和统一输出缓冲,以最大化处理大型数据集的吞吐量。 *注意:执行速度显著更快,但需要更多内存。* ### IP 地址与 CIDR 工具 * **`aggrip.py`** 将原始 IP 地址和 CIDR 块列表聚合成合并优化的 CIDR 列表。使用 `netaddr` 库。 * **`aggrip2.py`** 执行与 `aggrip.py` 相同的聚合,但使用 Python 内置的 `ipaddress` 模块。 *注意:此版本更快但消耗更多内存。* * **`aggrip-asn.py`** 根据复合标识符聚合 IP 到 CIDR 列表。读取制表符分隔的输入(`CIDR \t ID \t Name`),按 ID/Name 排序、分组并合并 CIDR 而不丢失标识元数据。 * **`aggrip-asn2.py`** 执行与 `aggrip-asn.py` 完全相同的复合标识符聚合,但使用高速批量内存读取、预计算整数元数据排序和元组映射,显著提升执行速度。 *注意:执行更快但需要更多内存。* * **`getip.py`** 一个强大的提取工具,充当 IP 感知的 `grep`。读取输入并明确提取有效 IP 地址、IP 范围(空格或短横线分隔)以及 CIDR,同时自动丢弃垃圾文本。默认情况下无效 CIDR 主机位会被自动截断,但可通过 `-s` / `--strict` 参数严格拒绝。默认严格验证行首,但支持“任意位置”(`-a` / `--anywhere`)深度扫描参数。输出严格合并、去重并按 IP 排序的 CIDR 列表。 * **`getip2.py`** 执行与 `getip.py` 完全相同的提取、整合和格式化(包括 `-s` / `--strict` 功能),但使用高速批量行读取、批量字符串缓冲和快速字符启发式跳过,显著提升深度扫描大型文本的速度。 *注意:执行更快但需要更多内存。* * **`ipsort.py`** 读取 STDIN,根据非 IP 文本(如注释、标题或空行)识别逻辑文档区段,并在每个区段内执行严格的 IP 感知排序(IPv4 在前,然后是 IPv6)。完美保留原始文档布局和区段注释。可选使用 `-a` / `--aggregate` 标志在保留的区段内执行 CIDR 聚合,以及使用 `-r` / `--reverse` 标志进行降序排序。 * **`ipsort2.py`** 执行与 `ipsort.py` 完全相同的分段布局保留 IP 排序、可选聚合(`-a` / `--aggregate`)和反向排序(`-r` / `--reverse`),但使用高速批量内存读取、启发式文本跳过和分段数组排序。 *注意:执行更快但需要更多内存。* * **`range2cidr.py`** 将 IP 范围语法(例如 `192.168.1.0-192.168.1.255`)转换为标准 CIDR 表示法。支持空格和短横线分隔符。参见 **`getip.py`** 获取更通用的版本。 * **`range2cidr2.py`** 执行与 `range2cidr.py` 相同的 IP 范围语法转换,但使用批量文本摄取和批量输出缓冲。 *注意:执行更快但需要更多内存。* * **`revip.py`** 将 IP 地址或 CIDR 列表转换为对应的反向 DNS 查找名称(IPv4 使用 `in-addr.arpa`,IPv6 使用 `ip6.arpa`)。 * **`revip2.py`** 执行与 `revip.py` 相同的反向 DNS 查找名称生成,但使用批量内存分块和优化字符串切片,显著减少大型数据集的处理时间。 *注意:执行更快但需要更多内存。* ### DNS 域名工具 * **`clean-dom.py`** DNS 块列表的综合优化脚本。它将一个或多个块列表与可选的允许列表和 Top-N 列表进行交叉引用,同时对所有提供的文件中的子域名进行去重。 **高级解析和路由功能:** * 接受本地文件路径和远程 URL(`http://` 或 `https://`)。 * 支持标准纯域名列表、HOSTS 文件语法和 Adblock 语法。 * 动态路由位于块列表文件中的行内 Adblock 允许规则(`@@||domain.com^`)到允许列表。 * 完全解析并强制执行 Adblock `$denyallow` 修饰符,作为对块和允许列表规则的严格例外。 * 自动规范化输入(转换为小写、去除首尾点、移除前导通配符 `*.domain.com` -> `domain.com`)。 * 可选丢弃未使用的允许列表条目(`--optimize-allowlist`),以确保导出的允许列表被严格利用。 * 动态输出为纯域名、HOSTS 或标准 Adblock 格式。 * 支持直接写入独立的块列表和允许列表文件。 *(注意:这是唯一一个不使用 STDIN 而是强制使用标准命令行参数的工具。它支持每个参数传递多个文件。详见 [clean-dom-manual.md](https://github.com/cbuijs/aggrip/blob/master/clean-dom-manual.md) 获取高级用法)。* * **`clean-dom2.py`** 执行与 `clean-dom.py` 完全相同的 DNS 优化、路由和去重,但使用高速批量内存读取和反向字符串 `O(N log N)` 排序算法。 *注意:对于大型块列表,执行显著更快,但消耗更多 RAM。命令参数相同。* * **`domsort.py`** 读取 STDIN,根据非域名文本(如注释或空行)识别逻辑文档区段,并在区段内严格验证并按根级别向下(树形/TLD 优先)对域名进行排序。完美保留原始文档布局。支持 `-l` / `--less-strict` 标志以允许域名中包含下划线(`_`)和星号(`*`)(例如通配符或 SRV 记录)而不破坏字母顺序。此外支持标准 A-Z 排序(`-a` / `--alphabetical`)和降序排序(`-r` / `--reverse`)。 * **`domsort2.py`** 执行与 `domsort.py` 完全相同的分段布局保留域名排序及可选参数支持(`-l` / `--less-strict`、`-a` / `--alphabetical`、`-r` / `--reverse`),但使用高速批量内存读取、快速路径文本跳过和分段数组排序。 *注意:执行更快但需要更多内存。* * **`getdom.py`** 一个强大的提取工具,域名感知的 `grep`。从标准输入读取文本(纯列表、HOSTS 格式、Adblock 订阅源或 URL),提取有效 DNS 域名并丢弃垃圾文本、IP 地址和注释。支持 `-a` / `--allow` 标志仅提取 Adblock/AdGuard “允许列表”域名(例如以 `@@` 开头的规则或 `$denyallow` 修饰符中的孤立例外)。也支持 `-l` / `--less-strict` 标志以允许域名中包含下划线(`_`)和星号(`*`)以提取通配符或 SRV 记录。使用 `-o` / `--output` 参数可将提取的域名即时格式化为 `plain`(默认)、`adblock`(动态输出 `||domain^` 或 `@@||domain^`,取决于 `-a` 标志)或 `hosts`(前置 `0.0.0.0`)。 * **`getdom2.py`** 执行与 `getdom.py` 完全相同的域名提取、语法路由和可定制输出格式化(`-o`),但使用高速批量内存摄取和统一输出缓冲,显著提升扫描大型数据集的速度。 *注意:执行更快但需要更多内存。* * **`undup.py`** 通过删除已存在父域名的子域名来去重 DNS 域名列表(例如,若存在 `example.com` 则移除 `sub.example.com`)。支持 `-l` / `--less-strict` 标志以在去重通配符和 SRV 记录时允许下划线(`_`)和星号(`*`)。 * **`undup2.py`** 执行与 `undup.py` 相同的去重和可选的宽松验证(`-l` / `--less-strict`),但以原始二进制/字节块读取和过滤数据。 *注意:执行更快但需要更多内存。* ## 使用说明 除了 `clean-dom.py` 之外,这些工具不需要强制性的命令行文件参数。它们被设计为通过标准输入(STDIN)和标准输出(STDOUT)链式调用,遵循通用/最佳实践。 **注意:** 可以通过 `-h` 或 `--help` 标志启动任意脚本以获取可用命令行参数的详细信息。 ### 管道示例: ``` cat raw_ips.txt | ./aggrip.py > optimized_cidrs.txt cat ranges.txt | ./range2cidr.py | ./aggrip.py cat mixed_sources.txt | ./getdom2.py -l | ./undup2.py -l | ./domsort2.py > clean_domains.txt cat messy_adblock.txt | ./getdom2.py -a -o adblock > clean_allowlist.txt cat mixed_ips_and_comments.txt | ./ipsort.py -r > nicely_sorted_sections.txt cat messy_sections.txt | ./ipsort2.py -a > aggregated_sections.txt cat wildcard_zones.txt | ./domsort2.py -l -a -r > clean_zones.txt cat messy_dump_of_everything.log | ./categorize2.py -i > flagged_inventory.txt cat ips.list | ./ipsort.py -a | ./revip.py | ./categorize.py > neat_categorized_rev_ips.txt ``` ### 关于 `clean-dom.py`: ``` ./clean-dom.py --blocklist bl1.txt https://example.com/bl2.txt \ [--allowlist al1.txt] \ [--topnlist top1.txt] \ [-o {domain,hosts,adblock}] \ [--out-blocklist out_bl.txt] \ [--out-allowlist out_al.txt] \ [--optimize-allowlist] \ [--suppress-comments] \ [-v | --verbose] ``` *使用 `-v` 或 `--verbose` 标志可向 STDERR 打印加载进度、处理阶段和最终的重复统计摘要。* ## 依赖与安装 部分工具(`aggrip.py`、`aggrip-asn.py`)需要外部库 `netaddr`。 要安装或升级所需依赖项,请运行: ``` pip install -r requirements.txt ```
标签:ARPa, B类E, CC顶级域, CIDR, DNS, eTLD, IP, IP地址处理, Python, RFC, SEO, SYN扫描, Unix管道, Web3, WPAD检测, 加密域名, 反向DNS, 垃圾数据清理, 域名解析, 多播, 广告子域, 快速路径正则, 排序, 无后门, 特殊用途IP, 系统分析, 网络分析, 网络分类, 网络工具, 聚合, 载波级NAT, 过滤, 追踪子域, 链路本地, 首标签分析