1. 首页
  2. 主题
  3. Go问与答

判断某个ip是否属于某个网段

farmerx · · 9832 次点击
``` 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] } ```
请问这样写,还能在优化吗
#1
更多评论
jan-bar
想要拥有,必定付出。
go1.18标准库都支持了,还直接支持ipv6判断包含之类的。不用自己写啦。 <a href="/user/farmerx" title="@farmerx">@farmerx</a> <a href="/user/jiftle" title="@jiftle">@jiftle</a> ```go package main import ( &#34;fmt&#34; &#34;net/netip&#34; ) 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

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中