必要に応じて iptables コマンドを呼び出す単純な C コードを設計しています。C コードを使用して、特定の IP アドレスからのパケットをドロップしたいだけです。そのため、与えられた入力に従って iptables コマンドを使用する必要があります。Cコードを使用してコマンドを呼び出すことは可能ですか? もしそうなら、どのように??? 前もって感謝します..
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 アドレスが含まれており、他のシェル コマンドが含まれていないことを確認するコードがない限り、これはセキュリティ上の脆弱性になることに注意してください。文字列のソースがまだ有効であることがわかっていない場合は、次の質問を参考にしてください。
system() または exec*() ファミリーのコマンドを使用せずにこれを行うことは可能ですが、実際にプロジェクトを完成させることにも興味があると思います:)
ただし、プログラム内の iptables から非常に基本的な機能のみが必要な場合、または正確なエラー処理が必要な場合は、iptables
パッケージのソースを入手できます。
高度な警告: iptables ioctl フックと対応する netfilter モジュールを調べることは、頭を柔らかくする作業であることが知られています。