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。

相关推荐
赋创小助手几秒前
超微SYS-821GE-TNHR深度测评:8卡 NVIDIA H200 风冷 AI 服务器
运维·服务器·人工智能·深度学习·计算机视觉·语言模型·自然语言处理
TG:@yunlaoda360 云老大几秒前
华为云国际站代理商IoTDA的设备生命周期管理功能如何保障数据安全?
服务器·数据库·华为云
nnsix2 分钟前
Http - POST请求
网络·网络协议·http
被生活耽误的旅行者4 分钟前
由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开
运维·服务器
代码游侠5 分钟前
应用——HTTP天气查询
网络·笔记·网络协议·算法·http
一介书生 `5 分钟前
轻量级服务器监 Beszel
运维·服务器
程序猿编码6 分钟前
手动清理 TCP TIME-WAIT 套接字:Linux 内核模块的实现与原理
linux·网络·tcp/ip·linux内核·套接字
中年程序员一枚8 分钟前
php实现调用ldap服务器,实现轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)
服务器·开发语言·php
随祥9 分钟前
windows下搭建MQTT测试环境(服务器/客户端)
运维·服务器
Smile丶凉轩9 分钟前
C++实现主从Reactor模型实现高并发服务器面试题总结
服务器·开发语言·c++