2017-04-07 238 views
2

鉴于:Golang - 检查是否IP地址是网络中

  • 网络地址A:(172.17.0.0/16
  • 和从主机B的IP地址:(172.17.0.2/16

如何判断B是否在A?

所有地址在以下形式的字符串变量:[IP address in dot-decimal notation]/[subnet mask]。我应该尝试通过操纵字符串来完成它(初始想法)。有不同的道路吗?

这里是Python的同一个问题:

,并转到另一种方法:

回答

7

Go net package包括以下功能:

  • ParseCIDR:采用代表IP /掩码的字符串并返回一个 IP和IPNET
  • IPNet.Contains:检查一个IP是否处于 网络

这应该涵盖您的需求。

+0

谢谢,我会尝试使用它们 – tgogos

2

基于Zoyd的反馈...

https://play.golang.org/p/wdv2sPetmt

package main 

import (
    "fmt" 
    "net" 
) 

func main() { 

    A := "172.17.0.0/16" 
    B := "172.17.0.2/16" 

    ipA,ipnetA,_ := net.ParseCIDR(A) 
    ipB,ipnetB,_ := net.ParseCIDR(B) 

    fmt.Println("Network address A: ", A) 
    fmt.Println("IP address  B: ", B) 
    fmt.Println("ipA    : ", ipA) 
    fmt.Println("ipnetA   : ", ipnetA) 
    fmt.Println("ipB    : ", ipB) 
    fmt.Println("ipnetB   : ", ipnetB) 


    fmt.Printf("\nDoes A (%s) contain: B (%s)?\n", ipnetA, ipB) 

    if ipnetA.Contains(ipB) { 
     fmt.Println("yes") 
    } else { 
     fmt.Println("no") 
    } 

} 
相关问题