字節序:大端序、小端序
大端序:低地址端存放高位字節
小端序:低地址端存放低位字節
大端序,網段指定首末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)
}