0
net.IPNet
型では、net.IP
が内部にあるかどうかを確認するContainsメソッドがあります。しかし、私が欲しいのは、net.IPNet
が別のnet.IPNet
の中にあるかどうかを知ることです。私はbig.Int
で動作するソリューションを試しましたが、機能しませんでした(また、関数のインターフェイスはひどいものでした)。何か案は?net.IPNet他のネットの中.IPNet?
// ipnet2 contains ipnet1 ?
func ContainsCIDR(ipnet1, ipnet2 net.IPNet) bool {
var begin big.Int
begin.SetBytes([]byte(ipnet1.IP))
var mask big.Int
mask.SetBytes([]byte(ipnet1.Mask))
var diff big.Int
diff.Xor(&begin, &mask)
var end big.Int
end.Add(&begin, &diff)
ipBegin := net.IP(begin.Bytes())
ipEnd := net.IP(end.Bytes())
return ipnet2.Contains(ipBegin) && ipnet2.Contains(ipEnd)
}
は非常にありがとう多く!ソリューションのいくつかのテストシナリオは、https://play.golang.org/p/Q4J-JEN3sFにあります。 – faersons