正式表達式判斷私有 IP 地址
^1(((0|27)(.(([1-9]?|1[0-9])[0-9]|2([0-4][0-9]|5[0-5])))|(72.(1[6-9]|2[0-9]|3[01])|92.168))(.(([1-9]?|1[0-9])[0-9]|2([0-4][0-9]|5[0-5]))){2})$
正則表達式判斷合法IP及私有IP
正則表達式在線測試
splunk 正則提取私有地址
源地址為內部地址:()
| regex src="^1(((0|27)(.(([1-9]?|1[0-9])[0-9]|2([0-4][0-9]|5[0-5])))|(72.(1[6-9]|2[0-9]|3[01])|92.168))(.(([1-9]?|1[0-9])[0-9]|2([0-4][0-9]|5[0-5]))){2})$"
AND dst!="^1(((0|27)(.(([1-9]?|1[0-9])[0-9]|2([0-4][0-9]|5[0-5])))|(72.(1[6-9]|2[0-9]|3[01])|92.168))(.(([1-9]?|1[0-9])[0-9]|2([0-4][0-9]|5[0-5]))){2})$"
攻擊方向:
內到外攻擊過濾:攻擊者源地址為私有地址,目標地址為公網地址。
src = private address, dst = public address
內到內攻擊過濾:攻擊者源地址為私有地址,目標地址為私有地址
src = private address, dst =private address
外到內攻擊過濾:攻擊者源地址公網地址,目標地址為私有地址。
src =public address, dst = private address
正式表達式判斷合法 IP 地址
對於一個 IP 地址 a.b.c.d
,a/b/c/d 代表一個小於或等於 255 的 10 進制數,並且 a 不能為 0。
對於 a,它的范圍是 1 – 255,分 3 種情況來編寫正式表達式:
- 一位數的情況,范圍是 1 – 9,正則表達式為
[1-9]
- 兩位數的情況,范圍是 10 – 99,正則表達式為
[1-9][0-9]
- 三位數的情況,需細分為三個范圍:
- 第一個范圍是 100 – 199,正則表達式為
1[0-9][0-9]
- 第二個范圍是 200 – 249,正則表達式為
2[0-4][0-9]
- 第三個范圍是 250 – 255,正式表達式為
25[0-5]
- 第一個范圍是 100 – 199,正則表達式為
所以匹配 a 的完整的正則表達式應該為:
對於 b/c/d,它的范圍是 0-255,所以匹配的正則表達應該為:
上面已經把一個 IP 地址各段數字的正則表達推導出來了,現在對其進行合並,讓正則表達式更加簡短。對於 a 段,合並后的正則表達式如下:
對於 b/c/d 段,合並后的正則表達式如下:
再看完整的 a.b.c.d
,可以拆分為a
+.(b)
+.(c)
+.(d)
,后面三段完全相同,所以合並之后就是 a
+(.(b)){3}
,即:
需要注意的是,以上正則表達式不能匹配 0.0.0.0
這個 IP 地址。
私有 IP 地址有三類,分別是:
- A 類私有地址,范圍:
10.0.0.0 - 10.255.255.255
- B 類私有地址,范圍:
172.16.0.0 - 172.31.255.255
- C 類私有地址,范圍:
192.168.0.0 - 192.168.255.255
A 類:10(.(([1-9]?|1[0-9])[0-9]|2([0-4][0-9]|5[0-5]))){3}
B 類:127.(1[6-9]|2[0-9]|3[01])(.(([1-9]?|1[0-9])[0-9]|2([0-4][0-9]|5[0-5]))){2}
C 類:192.168(.(([1-9]?|1[0-9])[0-9]|2([0-4][0-9]|5[0-5]))){2}
回環:
127(.(([1-9]?|1[0-9])[0-9]|2([0-4][0-9]|5[0-5]))){3}
172.16.44.0/22
Start:172.16.44.1
End: 172.16.47.254
172.16.4[4-7].([0-9]?|([1-9][0-9])?|(1[0-9][0-9])?|(2[0-4][0-9]|25[0-5])?){3}