0

必要に応じて iptables コマンドを呼び出す単純な C コードを設計しています。C コードを使用して、特定の IP アドレスからのパケットをドロップしたいだけです。そのため、与えられた入力に従って iptables コマンドを使用する必要があります。Cコードを使用してコマンドを呼び出すことは可能ですか? もしそうなら、どのように??? 前もって感謝します..

4

2 に答える 2

2

プログラムがルートとして実行されていると仮定すると、fork() と exec() を使用し、iptables コマンドを exec() に渡します。何かのようなもの

if (0 == fork()) {
    execl("/sbin/iptables", ...); // supply the proper arguments to iptables.
}

編集: system() は fork/exec よりも優れた方法であると他の人から見ています。

Neha は、sprintf を使用してコマンドをフォーマットし、他の変数に格納されている IP アドレスを含める方法がわからないようです。私はそれが次のように見えるべきだと思います:

char *host_to_block = ....
char comm[1000];
snprintf(comm, sizeof(comm), "iptables -A INPUT -s %s -j DROP", host_to_block);
system(comm);

host_to_block に IP アドレスが含まれており、他のシェル コマンドが含まれていないことを確認するコードがない限り、これはセキュリティ上の脆弱性になることに注意してください。文字列のソースがまだ有効であることがわかっていない場合は、次の質問を参考にしてください。

IPアドレスを検証する方法

于 2010-03-20T04:32:15.573 に答える
1

system() または exec*() ファミリーのコマンドを使用せずにこれを行うことは可能ですが、実際にプロジェクトを完成させることにも興味があると思います:)

ただし、プログラム内の iptables から非常に基本的な機能のみが必要な場合、または正確なエラー処理が必要な場合は、iptablesパッケージのソースを入手できます。

高度な警告: iptables ioctl フックと対応する netfilter モジュールを調べることは、頭を柔らかくする作業であることが知られています。

于 2010-03-20T06:04:27.207 に答える