```
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
fmt.Println(isBelong(`10.187.102.8`, `10.187.102.0/24`))
}
func isBelong(ip, cidr string) bool {
ipAddr := strings.Split(ip, `.`)
if len(ipAddr) < 4 {
return false
}
cidrArr := strings.Split(cidr, `/`)
if len(cidrArr) < 2 {
return false
}
var tmp = make([]string, 0)
for key, value := range strings.Split(`255.255.255.0`, `.`) {
iint, _ := strconv.Atoi(value)
iint2, _ := strconv.Atoi(ipAddr[key])
tmp = append(tmp, strconv.Itoa(iint&iint2))
}
return strings.Join(tmp, `.`) == cidrArr[0]
}
```
更多评论
go1.18标准库都支持了,还直接支持ipv6判断包含之类的。不用自己写啦。 <a href="/user/farmerx" title="@farmerx">@farmerx</a> <a href="/user/jiftle" title="@jiftle">@jiftle</a>
```go
package main
import (
"fmt"
"net/netip"
)
func main() {
p, err := netip.ParsePrefix(`10.187.102.0/24`)
if err != nil {
panic(err)
}
a, err := netip.ParseAddr(`10.187.102.8`)
if err != nil {
panic(err)
}
fmt.Println(p.Contains(a))
}
```
#3