正式表达式判断私有 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}