#P1451. 2024.10.23-秋招-第3题-防火墙规则匹配
-
ID: 154
Type: Default
1000ms
256MiB
Tried: 90
Accepted: 17
Difficulty: 9
Uploaded By:
TaZi
Tags>DFS
2024.10.23-秋招-第3题-防火墙规则匹配
题目内容
iptables是Linux系统的网络访问控制模块,管理员可通过iptables配置允许从哪些来源IP或IP段访问6个tinux主机。
iptables支持设置多个规则链,每个规则链中可以包含若干条访问控制规则。当系统收到一个网络报文时,会基于系统配置的访问控制规则来决定是接受还是拒绝这个报文。
请开发一个简化版iptables,现给定一系列规则操作命令和查询命令,
请依次输出其中查询命令的IP匹配结果。
规则操作命令有两种格式:
- op chain_name ip_or_cidr action.op有三种:
I表示Insert,在对应的规则链开始处插入一条规则,
A表示Append,在对应的规则链结尾处追加一条规则,
D表示从chain_name对应的链中删除一条规则;
action字段A表示Accept,R表示Reject
- op chain_name1 ip_or_cidr_G chain_name2.表示当匹配到此规则后跳转到chain_name2继续匹配,G表示Goto。
其中ip_or_cidr字段可以是单个IPV4地址,也可以是CIDR格式的IPV4地址段。
CIDR示例:10.1.0.0/24 表示10.1.0.0到10.1.0.25s这个IP段。
对于一个CDRa.b.c.d/a,如果一个IP地址的前n个bit与a.b.c.d的前n个bit相同,那么这个P属于a.b.c.d/这个IP段。
查询命令的格式: M ip 查询此IP是否被允许访问,M表示Match。输入用例保证一定有一条c0规则链,每一个M操作都从c0链开始依次对每一条规则进行匹配,
输出匹配到的第一条规则的action(A或R)。如果没有匹配到任何规则,输出U(表示Unknown)。只支持通过IP查询,不支持CIDR格式。
输入描述
第一行:一个整数N(2<=N<=100000),表示总的规则操作命令和查询命令的总数。
接下来N行为规则操作命令或查询命令。
输出描述
对于每一个M操作,输出规则匹配后的action字段 (A、R或U)
样例1
输入
11
A c0 192.168.1.0/24 R
I c0 192.168.1.1 A
A c0 10.1.0.0/24 G c2
A c1 0.0.0.0/0 R
A c2 10.1.0.3 R
A c2 10.1.0.0/24 A
M 192.168.1.1
M 192.168.1.10
D c0 192.168.1.0/24 R
M 192.168.1.10
M 10.1.0.3
输出
ARUR
说明
一共11条配置或查询操作。 规则链c0中包含3条规则,c1中包含1条规则,c2中包含2条规则。 然后查询192.168.1.1,匹配到了cO链中的I c0192.168.1.1 A,输出A;
查询192.168.1.10,匹配到了c0中的A c0 192.168.1.0/24 R,输出R;
接下来删除了c0中的192.168.1.0/24 R规则,再查询192.168.1.10时已没有任何规则可匹配,输出U;
又查询10.1.0.3,先匹配到了c0中的第3条规则,发现要goto c2,于是匹配到了c2中的10.1.0.3 R规则,输出R。
样例2
输入
2
A c0 192.168.1.0/24 R
M 192.168.1.20
输出
R
说明
一共2条配置或查询操作。
规则链c0中包含1条规则,拒绝来自192.168.1.0/24的IP。
192.168.1.20属于192.168.1.0/24 这个IP段,因此输出R。
通知
扫码备注华为交流群~期待您的到来
- 湘ICP备2023007293号
- Worker 0, 55ms
- Powered by Hydro v4.14.1 Community