2017-04-07 9 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は、以下の機能を含む:

ネットワーク内にあるか否かをチェックしますこれは、あなたのニーズをカバーする必要があります。 Zoydのフィードバックに基づいて

+0

おかげで、私はそれらを使用しようとします – tgogos

2

...

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") 
    } 

}