假設我必須定義一組防火牆規則。序言中的結構
struct rules {
int sourceL;
int sourceU;
int destL;
int destU;
char *proto;
char *action;
} r1,r2;
r1.sourceL=10;
r1.sourceU=20;
r1.destL=30;
r1.destU=40;
r1.proto="tcp";
r1.action="accept";
r2.sourceL=10;
r2.sourceU=10;
r2.destL=30;
r2.destU=30;
r2.proto="tcp";
r2.action="deny";
其中sourceL和sourceU是源IP地址的上限和下限,對於目標IP地址也是一樣。例如[10,20,30,40,tcp,allow]意味着[10,20]是源的子網,[30,40]是目標的子網。
下列表達是否正確?
rule(
r1,
sourceL(10),
sourceU(20),
destL(30),
destU(40),
proto(tcp),
action(accept)
).
rule(
r2,
sourceL(10),
sourceU(10),
destL(30),
destU(30),
proto(tcp),
action(deny)
).
如果不是,我該如何在prolog中表示它? 規則是靜態的,在運行時不會改變。 基本上我想檢查定義的規則之間的衝突,例如,如果有兩條規則[10,20,30,40,tcp,allow]和[10,10,30,30,tcp,deny],這會導致衝突。 如何才能比較結構的不同變量,以便我可以檢測規則中的衝突?
您需要提供更具體的用例。這真的取決於你需要怎麼處理這些規則:它們是靜態的,在編譯時是否已知?或者當程序運行時你會改變它們嗎?你打算如何使用這些規則中的數據?有太多不同的,有用的方式可以表示這樣的表格數據。 – 2016-11-25 07:20:55
所有數據都是靜態的。它們在運行時不會被改變。基本上,源和目的地都有一個上限和下限(在上面的代碼中沒有提到,爲了簡單起見)表示源和目的地的範圍。我必須檢查防火牆規則中是否存在衝突。 所以如果有規則[10,20,30,40,tcp,allow],這意味着[10,20]是源的子網,[30,40]是目標的子網。那麼如果我有另一個[10,10,30,30,tcp,否認]這是一個衝突。 –
你可以用你在評論中提供的細節來編輯你的問題嗎? – 2016-11-25 08:48:23