本文实例讲述了Go语言RPC Authorization进行简单ip安全验证的方法。分享给大家供大家参考。具体分析如下:
前言:写网络服务,总要考虑安全机制,对ip和网段进行判断是最简单的一个验证机制。之后想做一个类似注册式的安全验证机制,既可以减少配置文件的麻烦,又可以很好的进行安全管理。
直接上代码:
package main import( "net" "fmt" "time" "strings" ) func main(){ IP_ARRAY := "192.168.1.234,192.168.1.47,192.168.2.0/28" servPort:=":7272" l,err := net.Listen( "tcp",servPort ) if err != nil { fmt.Printf( "Listen is error" ) return } allowList :=strings.Split( IP_ARRAY,"," ) for{ conn,err:=l.Accept() if err != nil { fmt.Printf( "start connect is error" ) return } ipAddr:=conn.RemoteAddr() Addr := strings.Split( ipAddr.String(), ":") rAddr := net.ParseIP( Addr[0] ) var authorized bool = false for v := range allowList{ _,ipNet,err := net.ParseCIDR( allowList[v] ) if err != nil{ fmt.Printf( "parse ip net error" ) ipHost := net.ParseIP( allowList[v]) if ipHost != nil{ if ipHost.Equal( rAddr ) { authorized =true } }else{ fmt.Printf( "ip list error" ) } }else{ fmt.Printf( "Contains ip " ) if ipNet.Contains( rAddr ) { authorized =true } } } if authorized == true{ curTime:=time.Now() fmt.Printf( curTime.Format( "2006-01-02 15:04:05" ) ) conn.Write( []byte(curTime.Format( "2006-01-02 15:04:05" ) ) ) time.Sleep( 10) }else{ conn.Close() } } }
希望本文所述对大家的Go语言程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#cainiaojc.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。