2017-04-07 83 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") 
    } 

} 
相關問題