go - 计算CIDR的主机数量

在网络中,CIDR /32 表示该地址只能用作网络地址本身,不能分配给任何主机。因此,在计算主机数量时,应将 CIDR 地址按照其位掩码长度进行区分。对于 /32 子网掩码,主机数量总是为 1,而不是 -1。

以下是修正后的代码,可以正确地处理 /32 CIDR 地址:

Go 复制代码
package main

import (
	"fmt"
	"math"
	"net"
)

func main() {
	cidr := "10.22.2.1/32"
	hostCount, err := calculateHostCount(cidr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	fmt.Printf("Number of hosts in %s: %d\n", cidr, hostCount)
}

func calculateHostCount(cidr string) (int, error) {
	_, ipNet, err := net.ParseCIDR(cidr)
	if err != nil {
		return 0, err
	}

	maskLen, _ := ipNet.Mask.Size()
	if maskLen == 32 {
		return 1, nil
	}

	hostCount := int(math.Pow(2, float64(32-maskLen))) - 2

	return hostCount, nil
}
复制代码

通过添加了对 /32 子网掩码的特殊处理,现在代码会返回正确的主机数量 1,而不是 -1。

相关推荐
碳基沙盒1 天前
OpenClaw 多 Agent 配置实战指南
运维
Sinclair3 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
Rockbean4 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
蝎子莱莱爱打怪4 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
茶杯梦轩4 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
海天鹰5 天前
【免费】PHP主机=域名+解析+主机
服务器
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅5 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
不是二师兄的八戒5 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器
芝士雪豹只抽瑞克五5 天前
Nginx 高性能Web服务器笔记
服务器·nginx