GO語言判斷一個(gè)網(wǎng)段是否屬于另一個(gè)網(wǎng)段的子網(wǎng)
1.校驗(yàn)網(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都可以校驗(yàn),如果只想校驗(yàn)ipv4可以調(diào)用parseIPv4方法
1.3主函數(shù)運(yùn)行測(cè)試
func main() { ? ? ip := "100.4.11.3/24" ? ? result := IsNetWorkOk(ip) ? ? fmt.Println(result) }
2.校驗(yàn)ip是否合法
2.1函數(shù)
func IsIpOk(ip string ) bool{ ? ? address := net.ParseIP(ip) ? ? if address == nil { ? ? ? ? return false ? ? } ? ? return true }
2.2分析
點(diǎn)分十進(jìn)制換成2進(jìn)制,判斷是否合法:
2.3主函數(shù)運(yùn)行測(cè)試
func main() { ? ? ip := "100.4.11.34" ? ? result := IsIpOk(ip) ? ? fmt.Println(result) }
3.判斷兩個(gè)網(wǎng)段,一個(gè)是否是另一個(gè)的子網(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)段是否合法校驗(yàn) 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)行測(cè)試
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語言判斷一個(gè)網(wǎng)段是否屬于另一個(gè)網(wǎng)段的子網(wǎng)的文章就介紹到這了,更多相關(guān)golang網(wǎng)段內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang基于JWT與Casbin身份驗(yàn)證授權(quán)實(shí)例詳解
這篇文章主要為大家介紹了Golang基于JWT與Casbin實(shí)現(xiàn)身份驗(yàn)證授權(quán)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Go語言Telnet回音服務(wù)器的實(shí)現(xiàn)
這篇文章主要介紹了Go語言Telnet回音服務(wù)器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Go語言學(xué)習(xí)教程之goroutine和通道的示例詳解
這篇文章主要通過A?Tour?of?Go中的例子進(jìn)行學(xué)習(xí),以此了解Go語言中的goroutine和通道,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-09-09golang實(shí)現(xiàn)微信支付v3版本的方法
這篇文章主要介紹了golang實(shí)現(xiàn)微信支付v3版本的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03更高效的GoLevelDB:shardingdb實(shí)現(xiàn)分片和并發(fā)讀寫操作
這篇文章主要介紹了更高效的GoLevelDB:shardingdb實(shí)現(xiàn)分片和并發(fā)讀寫操作的相關(guān)資料,需要的朋友可以參考下2023-09-09