• 145534

    文章

  • 857

    评论

  • 13

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

golang 判断ip、内网ip


实现如下

package main

import (
   "fmt"
   "net"
   "strconv"
   "strings"
)

func checkIp(ipStr string) bool {
   address := net.ParseIP(ipStr)
   if address == nil {
      fmt.Println("ip地址格式不正确")
      return false
   } else {
      fmt.Println("正确的ip地址", address.String())
      return true
   }
}

// ip to int64
func inetAton(ipStr string) int64 {
   bits := strings.Split(ipStr, ".")

   b0, _ := strconv.Atoi(bits[0])
   b1, _ := strconv.Atoi(bits[1])
   b2, _ := strconv.Atoi(bits[2])
   b3, _ := strconv.Atoi(bits[3])

   var sum int64

   sum += int64(b0) << 24
   sum += int64(b1) << 16
   sum += int64(b2) << 8
   sum += int64(b3)

   return sum
}

//int64 to IP
func inetNtoa(ipnr int64) net.IP {
   var bytes [4]byte
   bytes[0] = byte(ipnr & 0xFF)
   bytes[1] = byte((ipnr >> 8) & 0xFF)
   bytes[2] = byte((ipnr >> 16) & 0xFF)
   bytes[3] = byte((ipnr >> 24) & 0xFF)

   return net.IPv4(bytes[3], bytes[2], bytes[1], bytes[0])
}

func isInnerIp(ipStr string) bool {
   if !checkIp(ipStr) {
      return false
   }
   inputIpNum := inetAton(ipStr)
   innerIpA := inetAton("10.255.255.255")
   innerIpB := inetAton("172.16.255.255")
   innerIpC := inetAton("192.168.255.255")
   innerIpD := inetAton("100.64.255.255")
   innerIpF := inetAton("127.255.255.255")
  
   return inputIpNum>>24 == innerIpA>>24 || inputIpNum>>20 == innerIpB>>20 ||
      inputIpNum>>16 == innerIpC>>16 || inputIpNum>>22 == innerIpD>>22 ||
      inputIpNum>>24 == innerIpF>>24 
}


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客