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。

相关推荐
开开心心就好16 小时前
系统管理工具,多功能隐私清理文件粉碎工具
java·网络·windows·r语言·电脑·excel·symfony
少云清16 小时前
【性能测试】3_性能测试基础 _指标
运维·服务器·数据库·性能测试·性能测试指标
广州服务器托管17 小时前
比较优秀的视频音频播放器PotPlayer64-v1.7.22764绿色版
运维·windows·计算机网络·电脑·音视频·可信计算技术
逑之17 小时前
C语言笔记15:动态内存管理
c语言·网络·笔记
行走的bug...17 小时前
cmake总结
linux·运维·服务器
hui函数17 小时前
如何解决 pip install 网络报错 403 Forbidden(访问被阻止)问题
网络·pip
凌波粒17 小时前
Linux 面试题篇
linux·运维·服务器
Joren的学习记录17 小时前
【Linux运维疑难杂症】k8s集群创建calico网络失败
linux·运维·kubernetes
乾元17 小时前
现场运维机器人的工程化落地——移动探针采集 + AI 诊断,在真实网络中的实现路径
运维·网络·人工智能·架构·机器人·自动化
鲨莎分不晴17 小时前
Docker 网络深度解析:打破容器的“孤岛效应”
网络·docker·容器