我目前正在研究一个Java应用程序,我需要实现一个用于构建BPF表达式的系统。我还需要实现检测等效BPF表达式的机制。检测等效表达式
构建表达式不是太难。我可以使用Interpreter设计模式构建语法树,并实现toString
以获取BPF语法。
但是,检测两个表达式是否相同更困难。一个简单的例子是下面的:
A: src port 1024 and dst port 1024
B: dst port 1024 and src port 1024
为了检测A和B是等同的我可能需要对它们进行比较之前,每个表达式转换成“归一化”的形式。以上例子很容易,但是,当使用嵌套AND
,OR
和NOT
操作的组合操作时,它变得越来越困难。
有谁知道我应该如何最好地解决这个问题?
我想我们在这里需要一个更好的“等价”定义。上下文是否重要(正如'net xx.xx.xx.xx/24'相当于DNS中的net xyz')。 –
检测变量并将它们按某种顺序放入,而不更改表达式。认识到b-a和a-b不一样。 – aartist
@Jim Garrison它应该检测两个表达式在语法上是否相同。它不会做任何dns解析,它只会考虑你的两个表达式是不同的。 – StackedCrooked