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

 更新时间:2015年03月02日 10:52:35   作者:两把刷子  
这篇文章主要介绍了Go语言RPC Authorization进行简单ip安全验证的方法,实例分析了Go语言进行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语言程序设计有所帮助。

相关文章

  • golang并发编程的实现

    golang并发编程的实现

    这篇文章主要介绍了golang并发编程的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • golang json.Marshal 特殊html字符被转义的解决方法

    golang json.Marshal 特殊html字符被转义的解决方法

    今天小编就为大家分享一篇golang json.Marshal 特殊html字符被转义的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 详解go语言 make(chan int, 1) 和 make (chan int) 的区别

    详解go语言 make(chan int, 1) 和 make (chan int) 的区别

    这篇文章主要介绍了go语言 make(chan int, 1) 和 make (chan int) 的区别,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • GO语言获取系统环境变量的方法

    GO语言获取系统环境变量的方法

    这篇文章主要介绍了GO语言获取系统环境变量的方法,实例分析了Getenv方法操作环境变量的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • GO语言如何手动处理TCP粘包详解

    GO语言如何手动处理TCP粘包详解

    最近在用golang开发人工客服系统的时候碰到了粘包问题,那么什么是粘包呢?下面这篇文章就来给大家介绍了关于GO语言如何手动处理TCP粘包的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴。
    2017-12-12
  • Golang巧用defer进行错误处理的方法

    Golang巧用defer进行错误处理的方法

    错误处理是程序的重要组成部分,有效且优雅的处理错误是大多数程序员的追求,下面这篇文章主要给大家介绍了关于Golang中巧用defer进行错误处理的方法,文中通过示例介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Go语言框架Beego项目搭建的方法步骤

    Go语言框架Beego项目搭建的方法步骤

    这篇文章主要介绍了Go语言框架Beego项目搭建的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 浅谈Go Slice 高级实践

    浅谈Go Slice 高级实践

    这篇文章主要介绍了浅谈Go Slice 高级实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Centos下搭建golang环境及vim高亮Go关键字设置的方法

    Centos下搭建golang环境及vim高亮Go关键字设置的方法

    这篇文章先给大家详细介绍了在Centos下搭建golang环境的步骤,大家按照下面的方法就可以自己搭建golang环境,搭建完成后又给大家介绍了vim高亮Go关键字设置的方法,文中通过示例代码介绍的很详细,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-11-11
  • golang实现java uuid的序列化方法

    golang实现java uuid的序列化方法

    这篇文章主要介绍了golang实现java uuid的序列化方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论