163. 24年10月-华为国内-3.防火墙规则匹配

难度 9
  • 标签:
  • 大厂笔试真题华为
题目描述
题解
题库

24年10月-华为国内-3.防火墙规则匹配

题目内容

iptables 是 Linux 系统的网络访问控制模块,管理员可通过 iptables 配置允许从哪些来源 IP 或 IP 段访问 Linux 主机。iptables 支持设置多个规则链,每个规则链中可以包含若干条访问控制规则。当系统收到一个网络报文时,会基于系统配置的访问控制规则来决定是接受还是拒绝这个报文。
请开发一个简化版 iptables,现给定一系列规则操作命令和查询命令,请依次输出其中查询命令的 IP 匹配结果。

规则操作命令有两种格式:

  1. op chain_name ip_or_cidr action
    op 有三种:

    • I 表示 Insert,在对应的规则链开始处插入一条规则
    • A 表示 Append,在对应的规则链结尾处追加一条规则
    • D 表示从 chain_name 对应的链中删除一条规则
      action 字段:A 表示 Accept,R 表示 Reject
  2. op chain_name 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.255 这个 IP 段。
对于一个 CIDR a.b.c.d/n,如果一个 IP 地址的前 n 个 bit 与 a.b.c.d 的前 n 个 bit 相同,那么这个 IP 属于 a.b.c.d/n 这个 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,匹配到了c0链中的I c0 192.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。