Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.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
}
@H_801_27@

大佬总结

以上是大佬教程为你收集整理的golang_正则表达式_匹配局域网全部内容,希望文章能够帮你解决golang_正则表达式_匹配局域网所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。