过滤内网IP—IPv4

本文介绍了一种检测IPv4地址是否为保留IP的方法,并提供了Go语言实现的代码示例。该方法可以有效地区分内网IP和外网IP。

检测输入的ip(适用于IPv4),内网ip返回false,外网ip返回true。

参考: https://en.wikipedia.org/wiki/Reserved_IP_addresses

package main

import (
   "net"
   "fmt"
)

func IsReservedIP(ip net.IP) bool {
   if ip == nil {
      return true
   }
   if ip4 := ip.To4(); ip4 != nil {
      switch ip4[0] {
      case 10:
         return true
      case 100:
         return ip4[1] >= 64 && ip4[1] <= 127
      case 127:
         return true
      case 169:
         return ip4[1] == 254
      case 172:
         return ip4[1] >= 16 && ip4[1] <= 31
      case 192:
         switch ip4[1] {
         case 0:
            switch ip4[2] {
            case 0, 2:
               return true
            }
         case 18, 19:
            return true
         case 51:
            return ip4[2] == 100
         case 88:
            return ip4[2] == 99
         case 168:
            return true
         }
      case 203:
         return ip4[1] == 0 && ip4[2] == 113
      case 224:
         return true
      case 240:
         return true
      }
   }
   return false
}

func main() {
   ip := "127.0.0.1"
   result := IsReservedIP(net.ParseIP(ip))
   fmt.Println(result)
}

 

 

 

 

转载于:https://my.oschina.net/xxWang/blog/1816643

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值