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 正则表达式 匹配局域网的更多相关文章
- [LeetCode] Regular Expression Matching 正则表达式匹配
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- 正则表达式匹配/data/misc/wifi/wpa_supplicant.conf的WiFi名称与密码
正则表达式匹配/data/misc/wifi/wpa_supplicant.conf的WiFi名称与密码: String regex_name="ssid=\"(.*?)\&quo ...
- 在Visual Studio中使用正则表达式匹配换行和批量替换
系统环境:Windows 8.1 Enterprise Update 2 x64 开发环境:Mircosoft Visual Studio Ultimate 2013 Update 2 RC 问题:如 ...
- .NET正则表达式匹配Silverlight
这是一个.NET正则表达式匹配工具的Silverlight 在页面中加入以下代码就可以了: <"> <param name="source" value ...
- Flex的正则表达式匹配速度与手工代码的比较
flex是一个词法分析器生成器,它是编译器和解释器编程人员的常用工具之一.flex的程序主要由一系列带有指令(称为动作代码)的正则表达式组成.在匹配输入时,flex会将所有的正则表达式翻译成确定性有穷 ...
- Java/Js下使用正则表达式匹配嵌套Html标签
转自:http://www.jb51.net/article/24422.htm 以前写过一篇文章讲解如何使用正则表达式完美解决Html嵌套标签的匹配问题(使用正则表达式匹配嵌套Html标签),但是里 ...
- Java正则表达式匹配例子
Java正则表达式匹配例子 package com.ibm.test; import java.util.regex.Matcher; import java.util.regex.Pattern; ...
- *****正则表达式匹配URL
最近将匹配URL的正则替换了下 之前的是: ((http|ftp|https)://)(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3 ...
- bash 正则表达式匹配,一行文本中 “包含 ABC” 并且 “不包含 XYZ”
bash 正则表达式匹配,一行文本中 “包含 ABC” 并且 “不包含 XYZ” A文件: XXXX ABC XXX4444444444444444XXXX ABC XXX XYZ6666666 ...
随机推荐
- 通过CXF,开发soap协议接口
1. 引入cxf的jar包 pom文件里面直接增加依赖 < dependency> <groupId > junit</ groupId> <artifact ...
- markdown中设置、调整图片尺寸
使用百分比描述尺寸 <img src="https://img2018.cnblogs.com/blog/1122471/201902/1122471-2019022218575673 ...
- 玩转Metasploit系列(第一集)
"如果我有七个小时的时间来砍树,那么我一定会花6个小时来磨我的斧头." –Abraham Lincoln ??这句话一直引导着我做事的思路,而且从未改变过.这篇文章翻译自Offen ...
- 事件总线(Event Bus)
事件总线(Event Bus)知多少 源码路径:Github-EventBus简书同步链接 1. 引言 事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉.事件总线是对 ...
- bzoj3106 [cqoi2013]棋盘游戏
Description 一个n*n(n>=2)棋盘上有黑白棋子各一枚.游戏者A和B轮流移动棋子,A先走. l A的移动规则:只能移动白棋子.可以往上下左右四个方向之一移动一格. ...
- [objc explain]: Non-fragile ivars
[objc explain]: Non-fragile ivars (2009-01-27 09:30 PM) Non-fragile instance variables are a hea ...
- UVa 11181 - Probability|Given(条件概率)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 1635 - Irrelevant Elements(二项式系数 + 唯一分解定理)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 【[SHOI2014]概率充电器】
这是一道概率+树形\(dp\) 首先我们看到这里每一个的贡献都是1,所以我们要求的期望就是概率 求得其实就是这个 \[\sum_{i=1}^nP_i\] \(P_i\)为节点\(i\)通电的概率 显然 ...
- PHP------面向对象的特性
面向对象的特性 一.面向对象有三大特性: 封装.继承.多态.(非常重要,第一要记住!!!!!!!!!!) 二.封装 封装就是用来做类的,把一个类封装起来.做类不能随便的做.我们做类不能随便去写一个类, ...