1

DNS 要求をインターセプトし、ドメインが許可されている場合にのみ応答を返すソケット API を使用して、C でコンテンツ フィルターを作成しています。これを説明する擬似コードは次のとおりです。

  1. すべての DNS クエリを、UDP ポート X でリッスンしているコンテンツ フィルタ プログラムにリダイレクトします。
  2. コンテンツ フィルタ プログラムは、照会されているドメインを抽出し、それが許可されているかどうかを判断します。
  3. 許可されている場合、コンテンツ フィルタ プログラムは、元の送信元と IP+ ポートを維持しながら、元の DNS 要求パケットを元の宛先 DNS サーバーに転送し、DNS サーバーが応答をクライアントに直接送信できるようにします。
  4. ドメインが許可されていない場合、返信は送信されません。

現在、プログラムは UDP ポート X でリッスンしていますが、問題は IP ヘッダーにアクセスできないため、元のヘッダーを維持しながら DNS 要求を元のサーバーに単純に転送できないことです。

使用してみsocket(AF_INET, SOCK_RAW, IPPROTO_UDP)ましたが、ポート X でバインドされず (当然のことです)、トラフィックを受信しません。

着信パケットの IP ヘッダーにアクセスしながら、UDP ポート X をリッスンする最善の方法は何ですか?

4

2 に答える 2

0

SOCK_RAW ベースのソケットの機能は、使用しているプラ​​ットフォームによって異なります。一般に、完全な IP データグラム情報にアクセスしたい場合は、Berkeley Packet Filterを使用して、対象の UDP ポートにアドレス指定されたデータリンク層フレームをタップすることをお勧めします。

于 2012-10-16T23:11:38.907 に答える