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 Gin框架实现文件下载功能的示例代码

    Golang Gin框架实现文件下载功能的示例代码

    本文主要介绍了Golang Gin框架实现文件下载功能的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Sublime Text3安装Go语言相关插件gosublime时搜不到gosublime的解决方法

    Sublime Text3安装Go语言相关插件gosublime时搜不到gosublime的解决方法

    本文主要介绍了Sublime Text3安装Go语言相关插件gosublime时搜不到gosublime的解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2022-01-01
  • Go语言实现简单留言板的方法

    Go语言实现简单留言板的方法

    这篇文章主要介绍了Go语言实现简单留言板的方法,涉及数据库、模板页面元素等留言板相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • go mod的使用方法小结

    go mod的使用方法小结

    本文主要介绍了go mod的使用方法小结,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 基于Go+WebSocket实现实时通信功能

    基于Go+WebSocket实现实时通信功能

    在互联网应用程序中,实时通信是一种非常重要的功能,WebSocket 是一种基于 TCP 的协议,它允许客户端和服务器之间进行双向通信,本文将介绍如何使用 Golang 创建单独的 WebSocket 会话,以实现实时通信功能,需要的朋友可以参考下
    2023-10-10
  • golang grpc配置使用实战

    golang grpc配置使用实战

    本文主要介绍了golang grpc配置使用实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • go 分布式锁简单实现实例详解

    go 分布式锁简单实现实例详解

    这篇文章主要为大家介绍了go 分布式锁简单实现实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • golang基础之waitgroup用法以及使用要点

    golang基础之waitgroup用法以及使用要点

    WaitGroup是Golang并发的两种方式之一,一个是Channel,另一个是WaitGroup,下面这篇文章主要给大家介绍了关于golang基础之waitgroup用法以及使用要点的相关资料,需要的朋友可以参考下
    2023-01-01
  • GPT回答:go语言和C语言切片对比

    GPT回答:go语言和C语言切片对比

    这篇文章主要为大家介绍了GPT回答:go语言和C语言切片对比,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Go for-range 的 value值地址每次都一样的原因解析

    Go for-range 的 value值地址每次都一样的原因解析

    循环语句是一种常用的控制结构,在 Go 语言中,除了 for 关键字以外,还有一个 range 关键字,可以使用 for-range 循环迭代数组、切片、字符串、map 和 channel 这些数据类型,这篇文章主要介绍了Go for-range 的 value值地址每次都一样的原因解析,需要的朋友可以参考下
    2023-05-05

最新评论