[Go] Golang: RPC Authorization 简单ip安全验证 →→→→→进入此内容的聊天室

来自 , 2020-10-27, 写在 Go, 查看 156 次.
URL http://www.code666.cn/view/991327d6
  1. package main
  2. import(
  3.     "net"
  4.     "fmt"
  5.     "time"
  6.     "strings"
  7. )
  8.  
  9. func main(){
  10.     IP_ARRAY := "192.168.1.234,192.168.1.47,192.168.2.0/28"
  11.     servPort:=":7272"
  12.     l,err := net.Listen( "tcp",servPort )
  13.     if err != nil {
  14.         fmt.Printf( "Listen is error" )
  15.         return
  16.     }
  17.     allowList :=strings.Split( IP_ARRAY,"," )
  18.     for{  
  19.         conn,err:=l.Accept()
  20.         if err != nil {
  21.             fmt.Printf( "start connect  is error" )
  22.             return
  23.         }
  24.         ipAddr:=conn.RemoteAddr()
  25.         Addr := strings.Split( ipAddr.String(), ":")
  26.         rAddr := net.ParseIP( Addr[0] )
  27.         var authorized bool = false
  28.         for v := range allowList{
  29.             _,ipNet,err := net.ParseCIDR( allowList[v] )
  30.             if err != nil{
  31.                 fmt.Printf( "parse ip net error" )
  32.                 ipHost := net.ParseIP( allowList[v])
  33.                 if ipHost != nil{
  34.                    if ipHost.Equal( rAddr ) {
  35.                       authorized =true
  36.                    }
  37.                 }else{
  38.                     fmt.Printf( "ip list error" )
  39.                 }
  40.             }else{
  41.                 fmt.Printf( "Contains ip " )
  42.                 if ipNet.Contains( rAddr ) {
  43.                     authorized =true
  44.                 }
  45.             }
  46.         }
  47.         if authorized == true{  
  48.             curTime:=time.Now()
  49.             fmt.Printf( curTime.Format( "2006-01-02 15:04:05" )  )
  50.             conn.Write( []byte(curTime.Format( "2006-01-02 15:04:05" ) ) )
  51.             time.Sleep( 10)
  52.         }else{
  53.             conn.Close()
  54.         }
  55.     }
  56. }
  57. //go/5658

回复 "Golang: RPC Authorization 简单ip安全验证 "

这儿你可以回复上面这条便签

captcha