Go可使用net.IPNet.Contains
檢查IP是否存在CIDR block的範圍。
CIDR block簡單說代表一個網段,例如10.0.0.0/16
CIDR block代表10.0.0.0 - 10.0.255.255
這個區間的所有共65,536個IP。
例如下面先用net.ParseCIDR
把CIDR字串10.0.0.0/16
轉為net.IPNet
物件後,呼叫net.IPNet.Contains
傳入要檢查的IP
即可確認這些IP是否屬於CIDR block中的IP。
main.go
package main
import (
"fmt"
"net"
)
func main() {
_, ipnet, err := net.ParseCIDR("10.0.0.0/16")
if err != nil {
panic(err)
}
fmt.Println(ipnet.Contains(net.ParseIP("10.0.0.0"))) // true
fmt.Println(ipnet.Contains(net.ParseIP("10.0.0.1"))) // true
fmt.Println(ipnet.Contains(net.ParseIP("10.0.255.255"))) // true
fmt.Println(ipnet.Contains(net.ParseIP("10.1.0.0"))) // false
}
沒有留言:
張貼留言