golang 大端匹配IP网段

字节序:大端序、小端序

大端序:低地址端存放高位字节
小端序:低地址端存放低位字节
在这里插入图片描述

大端序,网段指定首末ip

import "net"

func main () {
	ip, cidr, _ := net.ParseCIDR("10.1.0.0/16")
	// 10.1.0.0
    fmt.Println(ip)
    
    Prefix := cidr.IP.String()
    // 10.1.0.0
    fmt.Println(Prefix)
    
    m, _ := cidr.Mask.Size() 
    //int 16
    fmt.Println(m)
    
    //将mask转换成ip格式,255.255.0.0
	fmt.Println(net.IP(cidr.Mask).To4()) 
	
	//ffff0000(32bit,f=1111) 转换255.255.0.0 掩码
	fmt.Println(cidr.Mask)
    
	//10.1.0.0 加上100变成10.1.0.100,如果加上300,满255就会向前进位
	first = firstIP(cidr, 100)
	last = lastIP(cidr)

}
func firstIP(cidr net.IP, num int) string {
	//len(cidr.IP.To4())的长度是4
	ip := make(net.IP, len(cidr.IP.To4()))
	
	//10.1.0.0
    fmt.Println(cidr.IP.To4())
    
    // 0.0.0.0
    fmt.Println(ip) 

	//这里只接受cidr.IP.To4()ip类型,转为Uint32类型,| num等于+num,最大保位255,如果超过255,向前进一位变成10.1.1.0
    first:= binary.BigEndian.Uint32(cidr.IP.To4()) | num
   
    // ip初始化时为0.0.0.0,将first的值赋给ip
    binary.BigEndian.PutUint32(ip,first)
    
    return ip.String()
}

func lastIP(cidr net.IP) string {
	//反序,变成ffff 65535 : 0.0.255.255
	last:= ^binary.BigEndian.Uint32(net.IP(cidr.Mask).To4())
	// 将last的值赋给ip,10.1.255.255
    binary.BigEndian.PutUint32(ip,last)  
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章