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)  
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章