加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Go语言RPC Authorization进行简单ip安全验证的方法

发布时间:2016-12-04 15:24:14 所属栏目:教程 来源:站长网
导读:本文实例讲述了Go语言RPC Authorization进行简单ip安全验证的方法。分享给大家供大家参考。具体分析如下: 前言:写网络服务,总要考虑安全机制,对ip和网段进行判断是最简单的一个验证机制。之后想做一个类似注册式的安全验证机制,既可以减少配置文件的

本文实例讲述了Go语言RPC Authorization进行简单ip安全验证的方法。分享给大家供大家参考。具体分析如下:

前言:写网络服务,总要考虑安全机制,对ip和网段进行判断是最简单的一个验证机制。之后想做一个类似注册式的安全验证机制,既可以减少配置文件的麻烦,又可以很好的进行安全管理。

直接上代码:
复制代码 代码如下:package main
import(
nbsp;nbsp;nbsp; "net"
nbsp;nbsp;nbsp; "fmt"
nbsp;nbsp;nbsp; "time"
nbsp;nbsp;nbsp; "strings"
)
func main(){
nbsp;nbsp;nbsp; IP_ARRAY := "192.168.1.234,192.168.1.47,192.168.2.0/28"
nbsp;nbsp;nbsp; servPort:=":7272"
nbsp;nbsp;nbsp; l,err := net.Listen( "tcp",servPort )
nbsp;nbsp;nbsp; if err != nil {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; fmt.Printf( "Listen is error" )
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; return
nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp; allowList :=strings.Split( IP_ARRAY,"," )
nbsp;nbsp;nbsp; for{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; conn,err:=l.Accept()
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if err != nil {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; fmt.Printf( "start connectnbsp; is error" )
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; return
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; ipAddr:=conn.RemoteAddr()
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; Addr := strings.Split( ipAddr.String(), ":")
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; rAddr := net.ParseIP( Addr[0] )
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; var authorized bool = false
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; for v := range allowList{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; _,ipNet,err := net.ParseCIDR( allowList[v] )
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if err != nil{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; fmt.Printf( "parse ip net error" )
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; ipHost := net.ParseIP( allowList[v])
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if ipHost != nil{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if ipHost.Equal( rAddr ) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; authorized =true
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }else{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; fmt.Printf( "ip list error" )
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }else{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; fmt.Printf( "Contains ip " )
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if ipNet.Contains( rAddr ) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; authorized =true
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if authorized == true{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; curTime:=time.Now()
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; fmt.Printf( curTime.Format( "2006-01-02 15:04:05" )nbsp; )
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; conn.Write( []byte(curTime.Format( "2006-01-02 15:04:05" ) ) )
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; time.Sleep( 10)
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }else{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; conn.Close()
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp; }
}

希望本文所述对大家的Go语言程序设计有所帮助。

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读