目录
特点
输入处理
CIDR 操作
输出处理
安装
用法
1.标准输入模式
首页 后端开发 Golang 增强型 CIDR 块计算器,具有扩展的 Go 输入格式

增强型 CIDR 块计算器,具有扩展的 Go 输入格式

Jan 07, 2025 pm 12:07 PM

IP 地址范围的有效管理对于网络工程、云基础设施和网络安全至关重要。 CIDR(无类域间路由)块提供了一种紧凑的方式来表示 IP 地址范围,但手动处理它们可能很麻烦。 CIDR-Converter 是一个基于 Go 的实用程序,旨在简化此过程,同时支持扩展的输入格式。

在这里查看我的存储库:

Enhanced CIDR Block Calculator with Expanded Input Formats in Go 帕特故障 / cidr 转换器

CIDR 块转换器

CIDR 转换

用 Go 编写的命令行实用程序,用于处理、验证和合并各种格式的 IP 地址范围。该工具支持 CIDR 表示法、通配符表示法和多种输入/输出格式。

特点

输入处理

  • 支持多种输入格式:
    • CIDR 表示法(例如“192.168.1.0/24”)
    • 通配符(例如“192.168.1.*”)
    • 包含 CIDR 块的 CSV 文件
    • 包含 CIDR 块的 JSON 文件
  • 用于手动输入的交互式标准输入模式

CIDR 操作

  • 验证 IP 范围和 CIDR 块
  • 将通配符表示法转换为 CIDR 格式
  • 合并重叠的 CIDR 块
  • 对 CIDR 块进行排序以实现最佳组织

输出处理

  • 自动将合并结果保存到 JSON 文件
  • 漂亮打印的 JSON 输出
  • 全面的错误处理和报告

安装

确保您的系统上安装了 Go,然后:

git clone [repository-url]
cd [repository-name]
go build
登录后复制
登录后复制
登录后复制
登录后复制
进入全屏模式 退出全屏模式

用法

该工具支持三种输入模式:

1.标准输入模式

git clone [repository-url]
cd [repository-name]
go build
登录后复制
登录后复制
登录后复制
登录后复制
进入全屏模式 退出全屏模式
在 GitHub 上查看

我还计划创建一个具有附加功能的网络应用程序,以增加应用程序的功能和范围!

这个项目的灵感来自 Andy Walker 的 cidr-convert 存储库。

主要特点

1. 灵活的输入格式

  • 支持传统的 CIDR 表示法(例如 192.168.0.0/24)
  • 解析通配符符号(例如,192.168..
  • 将二进制字符串转换为 CIDR 块(例如 110000001010100000000000000000000/24)
  • 从 CSV 和 JSON 文件读取 CIDR

2. 智能合并

  • 将重叠的 CIDR 合并为最小集,减少冗余
  • 在可行的情况下将较小的子网聚合成较大的子网

3. 文件I/O支持

  • 解析来自文件或标准输入的输入
  • 将合并的 CIDR 保存到 JSON 文件以便于共享和存储

它解决的问题

处理大量 CIDR 列表可能很乏味,尤其是在处理重叠或相邻范围时。手动聚合这些范围很容易出错且耗时。该工具使流程自动化,确保最佳聚合并降低管理不善的风险。

它是如何运作的

核心功能

1.CIDR解析和验证

parseCIDR 函数确保输入符合有效的 CIDR 表示法。

2. 通配符和二进制解析

  • 通过分析掩码长度将通配符(例如 192.168..)转换为 CIDR
  • 二进制字符串(例如 11000000101010000000000000000000/24)被转换为 IP 地址

3.CIDR合并

  • mergeCIDRs 函数通过合并重叠范围来消除冗余
  • aggregateCIDRs 函数将较小的子网组合成更大的、包含的块

4. 文件解析

使用 parseCSV 和 parseJSON 函数从 CSV 和 JSON 格式读取 CIDR。

5、输出

合并的 CIDR 会保存到 JSON 文件中,以便其他工具或团队轻松使用。

用法示例

命令行执行

直接从终端运行该工具,指定输入类型:

git clone [repository-url]
cd [repository-name]
go build
登录后复制
登录后复制
登录后复制
登录后复制

样本输出

给定输入:

./cidr-processor
<span># Enter CIDR blocks interactively, one per line:</span>
192.168.1.0/24
10.0.0.*
<span># Press Ctrl+D (Linux/Mac) or Ctrl+Z (Windows) to</span>
登录后复制
登录后复制

该工具输出单个聚合块:

# Standard input
$ go run main.go
Enter CIDR blocks, one per line. Press Ctrl+D (Linux/Mac) or Ctrl+Z (Windows) to end input:
192.168.0.0/24
192.168.1.0/24

# CSV Input
$ go run main.go input.csv

# JSON Input
$ go run main.go input.json
登录后复制

保存到 merged_cidrs.json。

代码演练

解析通配符表示法

像 192.168.. 这样的通配符会转换为 CIDR:

192.168.0.0/24
192.168.1.0/24
登录后复制

该函数计算适当的前缀长度并构造 CIDR 块。

合并和聚合

mergeCIDRs 函数消除了冗余:

[
  "192.168.0.0/23"
]
登录后复制

聚合如下:

git clone [repository-url]
cd [repository-name]
go build
登录后复制
登录后复制
登录后复制
登录后复制

此步骤将相邻范围合并为更大的块。

文件解析

CSV 和 JSON 输入文件使用 parseCSV 和 parseJSON 进行解析,从而实现与现有工作流程的无缝集成:

./cidr-processor
<span># Enter CIDR blocks interactively, one per line:</span>
192.168.1.0/24
10.0.0.*
<span># Press Ctrl+D (Linux/Mac) or Ctrl+Z (Windows) to</span>
登录后复制
登录后复制

为什么去?

Go 强大的标准库,包括 net、regexp 和 encoding/json 等包,使其成为构建网络相关工具的绝佳选择。其强大的并发模型即使在处理大型数据集时也能确保高性能。

未来的增强功能

1.IPv6支持

  • 扩展功能以处理 IPv6 范围

2. 动态输入格式

  • 添加对 YAML 和 XML 的支持

3. 网页界面

  • 构建用于交互式 CIDR 管理的轻量级 Web 应用程序

结论

增强型 CIDR 块计算器通过扩展的输入格式、智能合并和强大的文件支持简化了 CIDR 管理。其多功能性使其成为网络工程师、云架构师和网络安全专业人员的宝贵工具。受到 Andy Walker 的 cidr-convert 的启发,该工具建立在基本思想的基础上,提供更全面的解决方案。立即尝试并简化您的 CIDR 工作流程!

以上是增强型 CIDR 块计算器,具有扩展的 Go 输入格式的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Go语言包导入:带下划线和不带下划线的区别是什么? Go语言包导入:带下划线和不带下划线的区别是什么? Mar 03, 2025 pm 05:17 PM

Go语言包导入:带下划线和不带下划线的区别是什么?

如何编写模拟对象和存根以进行测试? 如何编写模拟对象和存根以进行测试? Mar 10, 2025 pm 05:38 PM

如何编写模拟对象和存根以进行测试?

Beego框架中NewFlash()函数如何实现页面间短暂信息传递? Beego框架中NewFlash()函数如何实现页面间短暂信息传递? Mar 03, 2025 pm 05:22 PM

Beego框架中NewFlash()函数如何实现页面间短暂信息传递?

如何使用跟踪工具了解GO应用程序的执行流? 如何使用跟踪工具了解GO应用程序的执行流? Mar 10, 2025 pm 05:36 PM

如何使用跟踪工具了解GO应用程序的执行流?

如何定义GO中仿制药的自定义类型约束? 如何定义GO中仿制药的自定义类型约束? Mar 10, 2025 pm 03:20 PM

如何定义GO中仿制药的自定义类型约束?

Go语言中如何将MySQL查询结果List转换为自定义结构体切片? Go语言中如何将MySQL查询结果List转换为自定义结构体切片? Mar 03, 2025 pm 05:18 PM

Go语言中如何将MySQL查询结果List转换为自定义结构体切片?

Go语言如何便捷地写入文件? Go语言如何便捷地写入文件? Mar 03, 2025 pm 05:15 PM

Go语言如何便捷地写入文件?

我如何使用衬里和静态分析工具来提高GO代码的质量和可维护性? 我如何使用衬里和静态分析工具来提高GO代码的质量和可维护性? Mar 10, 2025 pm 05:38 PM

我如何使用衬里和静态分析工具来提高GO代码的质量和可维护性?

See all articles