golang_正则表达式_匹配局域网
发布时间:2020-12-16 09:35:06 所属栏目:大数据 来源:网络整理
导读:做一个微服务,需要对http头域里的remoteip做访问限制:所有局域网都要鉴权,其中一些特殊ip,如网关地址,直接拒绝,防止公网访问。正则表达式很好的解决了这个,直接贴代码,读者拿来直接改改就能用了。 ? 核心正则: 10.*.*.*10.(25[0-5]|2[0-4][0-9]|[0
做一个微服务,需要对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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |