1

C プログラム内から IPFW のテーブルに IP を追加したいと考えています。このコードはできるだけ効率的にする必要があるため、system() を呼び出したくありません。基本的に私の質問は、誰かがこれがどのように機能するか説明できますか? 使えるAPIが無いのでソースを見直している(追加の様子を見る)のですが、思ったより時間がかかっており、できれば誰か説明していただけると助かります。

私がやろうとしているのは、クライアントから接続を受信したときに、そのクライアントの IP アドレスを特定のテーブルに入れたいということです。

前もって感謝します!

4

2 に答える 2

1

それは本当の答えではなく、単なる明白な提案です。cvsupでシステムのソースコードをチェックしてください。次に、ipfw.cを探します。そこに、ルールを変更するために使用しているシステムコールが表示されます。ipfwプログラムはコマンドラインツールであるため、ユーザーランドに存在する必要があります。それはあなたがそれがすることをすることができなければならないことを意味します。(ただし、スーパーユーザー権限が必要です。)

于 2012-10-03T07:59:01.097 に答える
0

わかった。だから私は解決策を見つけました。

そのための ip_fw.h に構造体があります - ipfw_table_entry

コードは次のようになります。

...
ipfw_table_entry entry;

bzero(&entry, sizeof entry);

entry.addr = inet_addr("192.168.1.0");
entry.tbl = 100;
entry.masklen = 32;

setsockopt(ipfw_socket, IPPROTO_IP, IP_FW_TABLE_ADD, &entry, sizeof entry);
于 2012-10-08T07:42:15.697 に答える