0

マシンにDNSサーバーをセットアップしました。マシンが送信する前にDNS応答をキャプチャし、その中のいくつかのフィールドを変更してからパケットを送信したいと思います。

元のパケットも送信されるため、pcapコード(Cで記述)がキャプチャするパケットのフィールドのみを変更できます。これはコピーのように見えます。

iptablesでマシンから発信されたパケットをドロップしようとしましたが、pcapで挿入されたパケットもドロップします。

これから抜け出す方法はありますか?

ありがとうございました

4

1 に答える 1

1

pcap のみのソリューションを探している場合は、DNS 要求パケットをインターセプトして調べ、DNS サーバーが応答する前に適切な応答を組み立てる必要があります。DNS サーバーにエントリがキャッシュされている場合、パケットを組み立てて送信するカスタム コードが完了する前に応答する可能性が高いため、これは信頼できるとは言えません。

これを行う最も確実な方法は、netfilter フックであるカーネル モジュールを作成することです。Netfilter フックは、パケットを検査し、パケットがマシンを離れる前のいくつかのポイントでその処理に影響を与えることができます。NF_IP_LOCAL_OUT レベルでフックします。その後、発信パケットを調べて、それが基準に適合する DNS 応答であるかどうかを確認できます。この次の部分はまだ行っていませんが、カスタム フック関数への入力パラメーターとして skb (ソケット バッファー) に直接アクセスできるため、その場でパケットを変更し、NF_ACCEPT を返して応答をクライアントに渡すことができます。 . リクエスト自体で何らかの処理を行う必要がある場合は、代わりに NF_IP_LOCAL_IN にフックして、ユーザー空間プログラムに渡すなど、さまざまな方法で処理できます。

Linux カーネル プログラミング (検索: Linux カーネル モジュール プログラミング) および netfilter フックの例については、Google に多くの例があります。

于 2010-04-21T15:42:38.077 に答える