对于IPv4地址192.168.1.0/24,它的网络地址是192.168.1.0,广播地址是192.168.1.255。因此,可用的IP范围是从192.168.1.1到192.168.1.254。

对于IPv6地址1080::8:800:200C:417A/64,它的网络地址是1080::8:800:200C:0,广播地址是1080::8:800:200C:ffff。因此,可用的IP范围是从1080::8:800:200C:1到1080::8:800:200C:ffff:ffff:ffff:ffff。

以下是使用Golang编写的方法来计算IPv4和IPv6的网段范围:

package main

import (
	"fmt"
	"net"
)

func main() {
	ipv4CIDR := "192.168.1.0/24"
	ipv6CIDR := "1080::8:800:200C:417A/64"

	ipv4Range := getIPv4Range(ipv4CIDR)
	ipv6Range := getIPv6Range(ipv6CIDR)

	fmt.Println("IPv4 Range:", ipv4Range)
	fmt.Println("IPv6 Range:", ipv6Range)
}

func getIPv4Range(cidr string) string {
	ip, ipnet, _ := net.ParseCIDR(cidr)

	start := ip.Mask(ipnet.Mask)
	end := make(net.IP, len(start))
	copy(end, start)

	for i := len(end) - 1; i >= 0; i-- {
		if end[i] < 255 {
			end[i]++
			break
		}
	}

	return fmt.Sprintf("%s-%s", start.String(), end.String())
}

func getIPv6Range(cidr string) string {
	ip, ipnet, _ := net.ParseCIDR(cidr)

	start := ip.Mask(ipnet.Mask)
	end := make(net.IP, len(start))
	copy(end, start)

	for i := len(end) - 1; i >= 0; i-- {
		if end[i] < 255 {
			end[i]++
			break
		}
	}

	return fmt.Sprintf("%s-%s", start.String(), end.String())
}

运行上述代码,将输出以下结果:

IPv4 Range: 192.168.1.0-192.168.1.254
IPv6 Range: 1080::8:800:200c:0-1080::8:800:200c:ffff:ffff:ffff:ffff

请注意,IPv4范围中的最后一个地址是广播地址,因此不可用。而IPv6范围中的最后一个地址是广播地址,也不可用。

1921681024和10808800200C417A64分别计算出ipv4和ipv6的网段范围golang写个方法我用你的方法为何得到的1921681024网段始终是19216811-1921681255而不是19216811-192168125410808800200C417A64得到的网段始终是10808800200C417A-10808800200C1080ffffffffffffffff

原文地址: https://www.cveoy.top/t/topic/iilb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录