Go语言RPC Authorization进行简单ip安全验证的方法
本文实例讲述了Go语言RPCAuthorization进行简单ip安全验证的方法。分享给大家供大家参考。具体分析如下:
前言:写网络服务,总要考虑安全机制,对ip和网段进行判断是最简单的一个验证机制。之后想做一个类似注册式的安全验证机制,既可以减少配置文件的麻烦,又可以很好的进行安全管理。
直接上代码:
packagemain import( "net" "fmt" "time" "strings" ) funcmain(){ IP_ARRAY:="192.168.1.234,192.168.1.47,192.168.2.0/28" servPort:=":7272" l,err:=net.Listen("tcp",servPort) iferr!=nil{ fmt.Printf("Listeniserror") return } allowList:=strings.Split(IP_ARRAY,",") for{ conn,err:=l.Accept() iferr!=nil{ fmt.Printf("startconnect iserror") return } ipAddr:=conn.RemoteAddr() Addr:=strings.Split(ipAddr.String(),":") rAddr:=net.ParseIP(Addr[0]) varauthorizedbool=false forv:=rangeallowList{ _,ipNet,err:=net.ParseCIDR(allowList[v]) iferr!=nil{ fmt.Printf("parseipneterror") ipHost:=net.ParseIP(allowList[v]) ifipHost!=nil{ ifipHost.Equal(rAddr){ authorized=true } }else{ fmt.Printf("iplisterror") } }else{ fmt.Printf("Containsip") ifipNet.Contains(rAddr){ authorized=true } } } ifauthorized==true{ curTime:=time.Now() fmt.Printf(curTime.Format("2006-01-0215:04:05") ) conn.Write([]byte(curTime.Format("2006-01-0215:04:05"))) time.Sleep(10) }else{ conn.Close() } } }
希望本文所述对大家的Go语言程序设计有所帮助。