go 正则表达式分组匹配_golang 正则表达式 匹配局域网

做一个微服务,需要对http头域里的remoteip做访问限制:所有局域网都要鉴权,其中一些特殊ip,如网关地址,直接拒绝,防止公网访问。正则表达式很好的解决了这个,直接贴代码,读者拿来直接改改就能用了。

核心正则:

10.*.*.*

10\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])

172.16.*.* - 172.31.*.*

172\.((1[6-9])|(2[0-9])|(3[0-1]))\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])

192.168.*.*

192\.168\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])

golang的代码也很简单了,如下:

func IPAddrAcl(ip string) (RetStr string){

//本地环回地址属于白名单,允许访问

if match0, _ := regexp.MatchString(`127\.0\.0\.1`, ip); match0 {

RetStr = "white"

return

}

//局域网地址:10.*.*.*需要鉴权,其中网关地址10.10.30.1,直接拒绝

if match2, _ := regexp.MatchString(`10\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])`, ip); match2 {

if match3, _ := regexp.MatchString(`10\.10\.30\.1`, ip); match3 {

RetStr = "black"

return

}

RetStr = "auth"

return

}

//局域网地址:172.16.*.* - 172.31.*.* 需要鉴权

if match4, _ := regexp.MatchString(`172\.((1[6-9])|(2[0-9])|(3[0-1]))\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])`, ip); match4 {

RetStr = "auth"

return

}

//局域网地址:192.168.*.* 需要鉴权

if match5, _ := regexp.MatchString(

`192\.168\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])`, ip); match5 {

RetStr = "auth"

return

}

//其余地址或非法字符串或入参为空,均为非法,直接拒绝。如果对上层调用者不信任,这里可以再细化区别处理。

RetStr = "black"

return RetStr

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值