1

Q1-ライブラリでDNS要求/応答をキャプチャすることは可能ですか?

Q2-はいの場合、パケットを受け取ったら、DNS応答からフィールドを抽出する方法を示すサンプルコードを誰かが持っていますか?特に、DNSが特定のDNS名に対して解決したIPアドレス。

4

1 に答える 1

3

はい、可能です。

ただし、サンプルコードは少し長めになります...

本質的に、次のことを行う必要があります。

  1. イーサネットヘッダーを抽出します
  2. IPヘッダーを抽出します
  3. UDPヘッダーを抽出します[パケットが断片化されていない、またはTCPを使用していると仮定します]
  4. DNSペイロードを抽出します

次に、 RFC 1035に記載されている非常に詳細な説明に従って、パケットの残りの部分を処理します。

実際には、それは次のことを意味します。

  1. リクエストを無視する-必要な情報はすべてレスポンスにあります(QR == 1
  2. チェックしRCODE == 0ANCOUNT > 0
  3. 質問セクションを見て、照会された名前を見つけます
  4. Answer(duh!)セクションで回答を探してください

問題をさらに複雑にするには、DNSラベル(一連の<count><data...>フィールド)を処理する必要があり、圧縮ラベルも処理する可能性があります。

これは厄介に聞こえますが、実際にはそれほど難しいことではありませ。私はこれらすべてを実行するC++コードを持っており、それほど長くはありませんが、リリースできません。

于 2010-08-17T19:33:37.693 に答える