正则匹配内网地址

由于项目的需求,需要过滤掉内网IP地址。首先我们需要知道内网网段范围(内网保留地址),然后根据其规则,使用正则表达式针对性去匹配。

内网保留地址

Internet设计者保留了IPv4地址空间的一部份供专用地址使用,专用地址空间中的IPv4地址叫专用地址,这些地址永远不会被当做公用地址来分配,所以专用地址永远不会与公用地址重复.
IPv4专用地址如下:

IP等级 IP位置

  • Class A 10.0.0.0-10.255.255.255
    默认子网掩码:255.0.0.0

  • Class B 172.16.0.0-172.31.255.255
    默认子网掩码:255.240.0.0

  • Class C 192.168.0.0-192.168.255.255
    默认子网掩码:255.255.0.0

内网是可以上网的.内网需要一台服务器或路由器做网关,通过它来上网
做网关的服务器有一个网关(服务器/路由器)的IP地址,其它内网电脑的IP可根据它来随意设置,前提是IP前三个数要跟它一样,第四个可从0-255中任选但要跟服务器的IP不同

正则匹配

A 类网段

1
/^10\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$/

B类网段

1
/^172\.(1[6789]|2[0-9]|3[01])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$/

C类网段

1
/^192\.168\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$/

全匹配

1
/^(127\.0\.0\.1)|(localhost)|(10\.\d{1,3}\.\d{1,3}\.\d{1,3})|(172\.((1[6-9])|(2\d)|(3[01]))\.\d{1,3}\.\d{1,3})|(192\.168\.\d{1,3}\.\d{1,3})$/

全匹配测试用例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const reg = /^(127\.0\.0\.1)|(localhost)|(10\.\d{1,3}\.\d{1,3}\.\d{1,3})|(172\.((1[6-9])|(2\d)|(3[01]))\.\d{1,3}\.\d{1,3})|(192\.168\.\d{1,3}\.\d{1,3})$/

reg.test('localhost')
reg.test('127.0.0.1')
reg.test('10.0.0.0')
reg.test('10.255.255.255')
reg.test('172.16.0.0')
reg.test('172.31.255.255')
reg.test('192.168.0.0')
reg.test('192.168.255.255')


reg.test('192.168.255.256')
reg.test('192.169.255.256')
reg.test('172.32.255.255')
reg.test('172.15.255.255')
reg.test('9.0.0.0')
reg.test('11.0.0.0')

拓展

正则匹配IP地址

1
2
const reg = /^([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$/
reg.test('255.255.255.255')

正则匹配内网地址
http://example.com/20210312-正则匹配内网地址/
作者
csorz
发布于
2021年3月12日
许可协议