ReuxM13/prefixopt

GitHub: ReuxM13/prefixopt

prefixopt 是一款面向网络工程师和安全人员的高性能 IP 前缀列表优化工具,提供去重、聚合、过滤、语义比较、网络减法等全套前缀处理能力。

Stars: 2 | Forks: 0

![Tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/af99031934035149.svg)

prefixOptimizer Banner

# prefixopt ## 描述 **prefixopt** 是一款高性能的 CLI 工具,专为处理大型 IP 前缀列表的网络工程师和安全专业人员设计。 它自动化了前缀列表维护中最常见且易出错的任务:去重、CIDR 聚合、Bogon 过滤、语义比较、重叠检测以及网络减法(打孔)。 无论您是在清理防火墙规则、准备扫描范围、审计基础设施变更,还是规范化威胁情报源,**prefixopt** 都能帮助您将嘈杂且不一致的输入转换为干净、可靠的输出。 ### 核心功能 - **优化 (Optimization)** 自动移除重复和嵌套的前缀。 示例:如果 `/32` 已经被其父网段 `/24` 包含,则该 `/32` 将被丢弃。 - **聚合 (Aggregation)** 只要在数学上有效,就将相邻的子网合并为更大的超网。 - **过滤 (Filtering)** 移除不需要的地址空间,例如 Bogon、私有网络 (RFC 1918)、环回地址、多播地址以及其他不可路由的网段。 - **减法 (Subtraction)** 从另一个列表中排除一个列表,在需要时自动将较大的网络拆分为较小的碎片。 - **语义比较** 根据实际的地址空间而非文本表示来比较前缀列表。 这使得即使 CIDR 表示法不同,也能检测到真实的变更。 - **交集分析** 检测两个或多个来源之间的精确匹配和部分重叠。 - **灵活的解析** 从任意基于文本的来源(如日志、路由器配置、原始 CSV 和 JSON)中提取 IP、CIDR 和 IP 范围(例如,`10.0.0.1 - 10.0.0.50`)。 - **STDIN / 管道支持** 遵循 UNIX 哲学,在管道中运行良好。 支持的命令:`optimize`、`filter`、`stats`、`check`、`split`、`exclude`。 示例: cat logs.txt | prefixopt optimize ## 适用人群? - **运维工程师** `optimize`、`add`、`merge`、`stats` - **安全分析师 (Blue Team)** 用于基础设施审计的 `diff`, 用于规则冲突分析的 `intersect`, 用于威胁情报源清理的 `filter` - **渗透测试员与研究人员 (Red Team)** 用于范围管理的 `exclude`, 用于扫描目标切片的 `split`, 用于快速覆盖范围验证的 `check` ## 安装说明 需要 Python 3.9 或更高版本。 ``` # 克隆仓库 git clone https://github.com/ReuxM13/prefixopt.git cd prefixopt # 创建并激活 virtual environment(可选但推荐) python -m venv venv # 激活 venv .\venv\Scripts\activate # Windows source venv/bin/activate # Linux / macOS # 以 editable mode 安装(推荐用于开发) pip install -e . # 如果你需要 graphical interface (GUI) 支持: pip install -e .[gui] ``` ## 快速示例

prefixopt using

prefixopt using

``` # 清理并聚合无序列表 prefixopt optimize messy_ips.txt -o clean_acls.txt # 合并两个列表,同时保留行注释 (#) 并避免聚合 prefixopt merge list1.txt list2.txt --keep-comments # 在合并期间为 list1 中的所有新前缀打标签 prefixopt merge list1.txt base.txt --keep-comments --append-comment "Client X" # 查找两个文件之间的重叠(或单个文件内部的重叠) prefixopt intersect blacklist.txt whitelist.txt # 减去一个 scope(禁止扫描特定 IP) prefixopt exclude out_of_scope.txt target_scope.txt # 严格验证列表(如果 network address 中设置了 host bits 则失败) prefixopt optimize config.txt --strict ``` ## 图形用户界面 (GUI) GUI 是使用 PySide6 构建的可选组件。 在使用 [gui] 扩展安装后,您可以通过以下方式启动它: ``` prefixopt gui ``` ## 技术实现 该架构建立在模块化原则之上(Core / CLI / Data)。 - 性能:嵌套移除和聚合(基于栈)使用了线性复杂度 O(N) 的算法,这允许在几分钟内处理部分(最多 1000 万行)的 BGP Full View 表。 - 内存:数据的读取和过滤通过生成器实现,以最大程度地减少 RAM 消耗。 - 安全性:在管道内部,仅使用 IPv4Network/IPv6Network 对象进行处理;排除了字符串操作。实现了对输入数据大小的硬性限制,以防止 OOM。 ### 限制 - 内存开销:该工具使用纯 Python 编写。由于 `ipaddress` 对象的内存开销,处理超过 800-1000 万行的列表可能需要大量的 RAM(从 8-10GB 起步)。 - 大数据:该工具并非为实时大数据处理而设计。它是一个用于配置和访问列表的实用工具,而不是用于流量分析的。 ### 命令详细说明 | 命令 | 逻辑 / 数学 | 目标 | 输出格式 | 关键细节 | | :--- | :--- | :--- | :--- | :--- | | **`optimize`** | `Aggr(Sort(Set(A)))` | **压缩**
缩减 ACL,移除重复项。 | CIDR 列表 | 执行完整周期:排序 - 移除嵌套 - 聚合。 | | **`add`** | `Optimize(A + {new})` | **编辑**
添加新 IP 并立即重新优化。 | CIDR 列表 | 自动将新条目合并到现有子网中。 | | **`filter`** | `A - {Bogons}` | **清理**
移除私有、本地和保留的 IP。 | 干净的列表 | *不*进行聚合,仅移除不需要的条目。 | | **`merge`** | `Optimize(A ∪ B ...)` | **合并**
将多个情报源合并为一个主列表。 | CIDR 列表 | 支持 --keep-comments(去重而不进行聚合)和 --append-comment。 | | **`intersect`** | `A ∩ B` | **冲突分析**
查找公共区域或重叠的规则。 | 报告
(精确 + 部分) | 可视化显示源 A 中的哪些前缀与源 B 发生重叠。 | | **`exclude`** | `A \ B` | **减法**
从黑名单中移除白名单。 | 碎片列表 | 在数学上对网络进行打孔,并将其拆分。 | | **`diff`** | `(B \ A) ∪ (A \ B)` | **审计**
自上一个版本以来发生了什么变化? | 补丁 (`+`, `-`, `=`) | 语义比较(能够理解两个 `/24` 等同于一个 `/23`)。 | | **`check`** | `Target ∈ Set` | **查找**
此 IP 是否被我们的规则覆盖? | 父网络 | 查找包含目标 IP 的所有超网。 | | **`split`** | `Subnet(A, len)` | **拆分**
将网络切割成更小的块。 | 子网列表 | 适用于扫描范围(例如,将 `/16` 拆分为多个 `/24`)。 | | **`stats`** | `Count(A)` | **分析**
压缩率,唯一 IP 数量。 | 指标表 | 计算实际唯一 IP 的数量,忽略重叠部分。 | ## 许可证 本项目基于 *MIT License* 分发。详情请参见 `LICENSE` 文件。
标签:Bogon过滤, CIDR聚合, GUI工具, IPv4, IPv6, IP前缀优化, PowerShell, Python, Rust, UNIX管道, 去重, 后渗透, 威胁情报过滤, 子网计算, 密码管理, 扫描范围, 插件系统, 无后门, 无线安全, 网络减除, 网络安全, 网络审计, 网络工程师, 网络流量审计, 语义比较, 逆向工具, 重叠检测, 防火墙规则优化, 隐私保护