一道比较难的题,没有思路

1142
0
拿到了一家小公司的oa, 需要写一个模拟 host-based 防火墙,给了一个input list ,每一个包含了四个值:方向,协议, port number, ip address
方向和协议都只包含了两个变量: "inbound", "outbound". 协议 有: tcp or udp. 但是port number 定义了范围为1~65535. ip address: 为0.0.0.0 -255.255.255.255)

现在根据input list 定义都规则,问给你一个新的输入list,是否能够match之前定义的规则, 通入防火墙.

举一个栗子,输入有4个list,则定义了四个规则:(但是实际上有500k ~ 1million 个list,来定义规则)
inbound,tcp,80,192.168.1.2
outbound,tcp,10000-20000,192.168.10.11
inbound,udp,53,192.168.1.1-192.168.2.5
outbound,udp,1000-2000,52.12.48.92

我现在有一个新的 输入:
"outbound", "tcp", 10234, "192.168.10.11"

问是否有match 之前都规则,显然 match 了第二个 (因为10234 在10000-20000的范围)所以可以通过防火墙
另外一个 输入
"inbound", "tcp", 81, "192.168.1.2" 没有match到任何一个规则。不能通过防火墙

文件输入的list定义的规则,有500k~1million 个。
如果每一个ip address,都对应了一个 port number,对应了一个协议和方向 那岂不是 要存 255,255,255,255 * 65535 * 2* 2 种情况?远远超出了hashmap的范围。楼主想了很久,菜鸡 实在不知道该如何下手,请大神们赐教~{:4_112:}
0条回复