ファイアウォールルールのセットを定義する必要があるとします。プロローグ内の構造
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)
).
もしそうでない場合は、プロローグでどのように表現すればよいですか? ルールは静的であり、実行時には変更されません。 基本的には、定義されたルール間の競合をチェックしたいと思っていました。たとえば、[10,20,30,40、tcp、allow]と[10,10,30,30、tcp、deny]という2つのルール紛争へ ルールの競合を検出できるように、構造のさまざまな変数を比較するにはどうすればよいですか?
より具体的な使用例を提供する必要があります。それは本当にあなたがルールで何をする必要があるかによって異なります。コンパイル時には静的であるかどうかです。あるいは、プログラムの実行中にそれらを変更しようとしていますか?これらのルールのデータをどのように使用しますか?このように表形式のデータを表現するには、あまりにも多くの異なる便利な方法があります。 –
すべてのデータは静的です。実行時に変更されることはありません。基本的には、ソースとデスティネーションの範囲を示すソースとデスティネーションの両方に上限と下限があります(簡単にするために上のコードでは言及していません)。ファイアウォールのルールに矛盾がないかどうかを確認する必要があります。 ルール[10,20,30,40、tcp、allow]がある場合は、[10,20]が送信元のサブネットで[30,40]が送信先のサブネットであることを意味します。それから私が別の[10,10,30,30、tcp、deny]を持っているならそれは矛盾です。 –
コメントに入力した内容で質問を編集できますか? –