5

WiresharkでDNS応答パケットを調べていましたが、回答セクションと権限のあるセクションの16進コーディングを理解できません。

次のDNSクエリを検討しています:mail.abcd.com

回答セクションには名前フィールドが含まれており、このための16進コーディングは次のように異なります。

 0xc00c
 0xc012

どちらも、名前全体がフィールドに入力されます。

権限のあるセクションには名前フィールドも含まれていますが、これの16進コーディングは通常次のとおりです。

 0xc010

これにより、abcd.comがフィールドに入力されます。

かなり紛らわしいので、これらのフィールドに入力するための規則が何であるかを誰かに教えてもらえますか。

ありがとう

4

3 に答える 3

9

DNSラベルはの形式を使用します<length><data ...>

ラベルの長さは最大63バイトである可能性があるため、<length>フィールドには2ビットが残っています。これらは、ラベルタイプをエンコードするために使用されます。

上位2ビットがそうである場合0b11、残りの6ビットは代わりに次のバイトと結合されて圧縮ポインタを形成します。これはDNSペイロード内で別のラベルの前のインスタンスへのオフセットです。

DNSプロトコルヘッダーの長さは12バイトであるため、最短の有効なオフセットは12バイトであり、上記の値を示します0xc00c

[技術的には、ヘッダーを指す圧縮ポインターを作成する場合がありますが、プロトコルに厳密に準拠しているわけではありません]。

ワイヤーパケットから仕様をリバースエンジニアリングしようとしないことを強くお勧めます-必然的に何かを見逃すことになります。代わりにRFC1035を読んでください-すべてのコアなものがそこにあります。

于 2012-03-26T09:24:11.700 に答える
5

仕様の名前の圧縮について読んでください。0xc、0x12、および0x10は、パケット内の「mail.abcd.com」および「abcd.com」という名前の以前のコピーへのポインターです。

于 2012-03-26T00:58:13.900 に答える
0

DNSからの名前圧縮技術

DNSメッセージは、オフセット値を使用して、メッセージの開始後、メッセージにすでに含まれているドメイン名を見つけることができるバイト数を示します。

ここに画像の説明を入力してください

ここで、「開始バイトのアドレス」は、メッセージ全体の先頭からバイト単位でカウントされます。最初のバイトとしてゼロからカウントを開始します

したがって、この例では、0xC00Cは1100 0000 0000 1100です。これは、DNSメッセージ全体の先頭から12バイトである1100オフセットを意味します。

于 2018-12-25T07:16:18.243 に答える