GO語言判斷一個網(wǎng)段是否屬于另一個網(wǎng)段的子網(wǎng)
1.校驗網(wǎng)段是否合法
1.1函數(shù)
import ( ? ? "fmt" ? ? "net" ) func IsNetWorkOk(network string ) bool{ ? ? _, _, err := net.ParseCIDR(network) ? ? if err != nil { ? ? ? ? return false ? ? } ? ? return true }
1.2分析
第一步就是先split變成ip跟子網(wǎng)掩碼
主要原理就是變成二進(jìn)制以后再進(jìn)行判斷
ipv4跟ipv6都可以校驗,如果只想校驗ipv4可以調(diào)用parseIPv4方法
1.3主函數(shù)運(yùn)行測試
func main() { ? ? ip := "100.4.11.3/24" ? ? result := IsNetWorkOk(ip) ? ? fmt.Println(result) }
2.校驗ip是否合法
2.1函數(shù)
func IsIpOk(ip string ) bool{ ? ? address := net.ParseIP(ip) ? ? if address == nil { ? ? ? ? return false ? ? } ? ? return true }
2.2分析
點分十進(jìn)制換成2進(jìn)制,判斷是否合法:
2.3主函數(shù)運(yùn)行測試
func main() { ? ? ip := "100.4.11.34" ? ? result := IsIpOk(ip) ? ? fmt.Println(result) }
3.判斷兩個網(wǎng)段,一個是否是另一個的子網(wǎng)
3.1函數(shù)
func ContainsCIDR(a, b *net.IPNet) bool { ? ? ones1, _ := a.Mask.Size() ? ? ones2, _ := b.Mask.Size() ? ? return ones1 <= ones2 && a.Contains(b.IP) } //最好提前做好網(wǎng)段是否合法校驗 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分析
調(diào)用了ip包含的方法
3.3運(yùn)行測試
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) }
到此這篇關(guān)于GO語言判斷一個網(wǎng)段是否屬于另一個網(wǎng)段的子網(wǎng)的文章就介紹到這了,更多相關(guān)golang網(wǎng)段內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang基于JWT與Casbin身份驗證授權(quán)實例詳解
這篇文章主要為大家介紹了Golang基于JWT與Casbin實現(xiàn)身份驗證授權(quán)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Go語言學(xué)習(xí)教程之goroutine和通道的示例詳解
這篇文章主要通過A?Tour?of?Go中的例子進(jìn)行學(xué)習(xí),以此了解Go語言中的goroutine和通道,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-09-09更高效的GoLevelDB:shardingdb實現(xiàn)分片和并發(fā)讀寫操作
這篇文章主要介紹了更高效的GoLevelDB:shardingdb實現(xiàn)分片和并發(fā)讀寫操作的相關(guān)資料,需要的朋友可以參考下2023-09-09