golang_正则表达式_匹配局域网

Posted brave-xin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
}

  

  

 

以上是关于golang_正则表达式_匹配局域网的主要内容,如果未能解决你的问题,请参考以下文章

python成长之路第三篇_正则表达式

python成长之路第三篇_正则表达式

正则表达式 - 匹配任何东西

python_正则表达式_re

00066_正则表达式

python爬虫 正则表达式 re.finditer 元字符 贪婪匹配 惰性匹配