Wie erkennt man, ob es eine Kreuzung zwischen zwei Golang net.IPNet Objekten gibt?Wie erkennt man, ob sich zwei Golang net.IPNet-Objekte schneiden?
das heißt, wie sowohl zu überprüfen, ob die erste Netzwerk-Subnetz der zweiten OR ist, wenn die zweite Netzwerk-Subnetz der ersten ist.
Bietet Go eine Dienstprogrammfunktion für diese spezielle Aufgabe?
Siehe Testcode unten.
package main
import (
"fmt"
"net"
)
func main() {
_, net1, _ := net.ParseCIDR("1.1.1.1/24")
_, net2, _ := net.ParseCIDR("1.1.0.2/16")
_, net3, _ := net.ParseCIDR("1.1.1.3/25")
_, net4, _ := net.ParseCIDR("1.2.0.4/16")
test(net1, net2, true)
test(net2, net1, true)
test(net1, net3, true)
test(net3, net1, true)
test(net1, net4, false)
test(net4, net1, false)
}
func test(n1, n2 *net.IPNet, expect bool) {
result := intersect(n1, n2)
var label string
if result == expect {
label = "good"
} else {
label = "FAIL"
}
fmt.Printf("test intersect(%v,%v)=%v expected=%v => %s\n", n1, n2, result, expect, label)
}
func intersect(n1, n2 *net.IPNet) bool {
return false // FIXME WRITEME
}
Run auf Go Playground
Wie das? Ziemlich sicher, dass der letzte Wert in der IP ** nie ** der gleiche sein wird ... Sie müssen Subnetzmasken oder einen Teilstring der IP vergleichen. – evanmcdonnal
@evanmcdonnal Ich bin mir nicht sicher, was du meinst. IPNet.IP ist die Netzwerknummer, nicht die IP, die geparst wurde, und wir brauchen nur die Eindämmung. – dahc
Sollte in diesem Fall gut funktionieren. Ich denke, ich muss die Dokumente lesen. – evanmcdonnal