做乙個微服務,需要對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
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
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
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
正規表示式 匹配分組
功能 匹配左右任意乙個表示式 ab 將括號中字元作為乙個分組 num引用分組num匹配到的字串 p 分組起別名 p name 引用別名為name分組匹配到的字串 import re 水果列表 fruit list banana orange pear 遍歷資料 for value in fruit ...
JavaScript 正規表示式的分組匹配
下面的正規表示式可以匹配kidkidkid kidkidkid 而另一種更優雅的寫法是 kid 這裡由圓括號包裹的乙個小整體稱為分組。乙個分組中,可以有多個候選表示式,用 分隔 var reg i love him her it reg.test i love him true reg.test i...
JavaScript正規表示式的分組匹配詳解
分組 下面的正規表示式可以匹配kidkidkid kidkidkid 而另一種更優雅的寫法是 kid 這裡由圓括號包裹的乙個小整體稱為分組。候選 乙個分組中,可以有多個候選表示式,用 分隔 varreg i love him her it reg.test i love him true reg.t...