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

本文实例讲述了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#niaoge.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。