首頁 > 軟體

GO語言判斷一個網段是否屬於另一個網段的子網

2022-03-16 19:00:17

1.校驗網段是否合法

1.1函數

import (
    "fmt"
    "net"
)
func IsNetWorkOk(network string ) bool{
    _, _, err := net.ParseCIDR(network)
    if err != nil {
        return false
    }
    return true
}

1.2分析

第一步就是先split變成ip跟子網掩碼

主要原理就是變成二進位制以後再進行判斷

ipv4跟ipv6都可以校驗,如果只想校驗ipv4可以呼叫parseIPv4方法

1.3主函數執行測試

func main() {
    ip := "100.4.11.3/24"
    result := IsNetWorkOk(ip)
    fmt.Println(result)
}

2.校驗ip是否合法

2.1函數

func IsIpOk(ip string ) bool{
    address := net.ParseIP(ip)
    if address == nil {
        return false
    }
    return true
}

2.2分析

點分十進位制換成2進位制,判斷是否合法:

2.3主函數執行測試

func main() {
    ip := "100.4.11.34"
    result := IsIpOk(ip)
    fmt.Println(result)
}

3.判斷兩個網段,一個是否是另一個的子網

3.1函數

func ContainsCIDR(a, b *net.IPNet) bool {
    ones1, _ := a.Mask.Size()
    ones2, _ := b.Mask.Size()
    return ones1 <= ones2 && a.Contains(b.IP)
}

//最好提前做好網段是否合法校驗
func ContainsCIDRString(a,b string)(bool,error){
    _, net1, err := net.ParseCIDR(a)
    if err != nil {
        return false,err
    }
    _, net2, err := net.ParseCIDR(b)
    if err != nil {
        return false,err
    }
    result := ContainsCIDR(net1,net2)
    return result,err
}

3.2分析

呼叫了ip包含的方法

3.3執行測試

func main() {
    net1 := "100.64.0.0/16"
    net2 := "100.64.0.0/20"
    _, a, err := net.ParseCIDR(net1)
    _, b, err := net.ParseCIDR(net2)
    if err != nil {
        return
    }
    result := ContainsCIDR(a,b)
    fmt.Println(result)
}

到此這篇關於GO語言判斷一個網段是否屬於另一個網段的子網的文章就介紹到這了,更多相關golang網段內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com