Netcatまたは/dev/udp/を使用してDNSクエリを作成する

Netcatまたは/dev/udp/を使用してDNSクエリを作成する

ncbashORを使用して有効なDNS要求を送信しようとしています/dev/udp/

有効なDNSパケットをテンプレートにしました。

tcpdump -XX port 53

その後、新しい端末でカールを使用して要求します。

curl https://duckduckgo.com/

これにより、tcpdump 端末に次のデータが生成されます。

    0x0000:  4500 003c b0b4 4000 4011 73c3 0a00 020f  E..<..@[email protected].....
    0x0010:  0a2a 0001 bdd4 0035 0028 4f24 cfc9 0100  .*.....5.(O$....
    0x0020:  0001 0000 0000 0000 0a64 7563 6b64 7563  .........duckduc
    0x0030:  6b67 6f03 636f 6d00 0001 0001            kgo.com.....

これにより、リクエストを少し修正しました。この参照そしてファイルに保存します/tmp/ddg.txt

0000:  4500 003c b0b4 4000 4011 73c3 0a00 020f  E..<..@[email protected].....
0010:  0a2a 0001 bdd4 0035 0028 4f24 cfc9 0100  .*.....5.(O$....
0020:  0001 0000 0000 0000 0a64 7563 6b64 7563  .........duckduc
0030:  6b67 6f03 636f 6d00 0001 0001            kgo.com.....

その後、リクエストを生成しようとしましたが、次のエラーメッセージが表示されました。

xxd -r /tmp/ddg.txt | nc -q 1 -nu 10.42.0.1 53
xxd: sorry, cannot seek backwards.

Wiresharkでリクエストの形式が正しくありません。私はここで何を間違えましたか?この方法を使用して正しいDNSクエリを送信できますか?

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

ベストアンサー1

あなたはすでに使用していますTCPダンプ。しかし、あなたは使用する必要がありますラインシャーク後で述べたように、あなたが提供したリンクと同じ間違いをしたことがわかります。追加コンテンツが含まれています。IPv4+UDPプロトコルヘッダー:次の項目のみを送信する必要があります。インターネット猫IPv4 UDPパケットを送信したためです。

重複したアドレスを持たない16進データは次のとおりです。

IPv4ヘッダ:

4500 003c b0b4 4000 4011 73c3 0a00 020f 0a2a 0001

UDPヘッダ(0028はUDP部分全体の長さです:8 + 20 =>長さ0x20 =ペイロード32バイト):

bdd4 0035 0028 4f24

UDPペイロード:

cfc9 0100 0001 0000 0000 0000 0a64 7563 6b64 7563 6b67 6f03 636f 6d00 0001 0001

xxd-p書き込みの代わりにパラメータを使用できますが、もっと重要なのはアドレスが必要ないことです-r(これを行うと、アドレスを書き換えて番号を付け直す必要はありません)。

-p | -ps | -postscript | -plain
PostScript順次16進ダンプスタイルで出力されます。純粋な16進ダンプスタイルとも呼ばれます。

reverse( -r) を使用すると、場所に関係なくすべてのスペースも無視されます。

これは完了したテストです(うまく動作するテストIPの代わりに自分のDNSサーバーIPを再挿入しました)。

$ echo cfc9 0100 0001 0000 0000 0000 0a64 7563 6b64 7563 6b67 6f03 636f 6d00 0001 0001 |
    xxd -p -r | nc -q1 -w2 -n -u 10.42.0.1 53 | xxd
00000000: cfc9 8180 0001 0001 0004 0000 0a64 7563  .............duc
00000010: 6b64 7563 6b67 6f03 636f 6d00 0001 0001  kduckgo.com.....
00000020: c00c 0001 0001 0000 005e 0004 2872 b19c  .........^..(r..
00000030: c00c 0002 0001 0002 91bb 0014 0464 6e73  .............dns
00000040: 3303 7030 3505 6e73 6f6e 6503 6e65 7400  3.p05.nsone.net.
00000050: c00c 0002 0001 0002 91bb 0007 0464 6e73  .............dns
00000060: 31c0 41c0 0c00 0200 0100 0291 bb00 0704  1.A.............
00000070: 646e 7332 c041 c00c 0002 0001 0002 91bb  dns2.A..........
00000080: 0007 0464 6e73 34c0 41                   ...dns4.A

変えるインターネット猫そしてソカット:使用nc -q1 -w2 -n -u 10.42.0.1 53。 。 。交換socat udp4:10.42.0.1:53 -。 EOF条件をよりよく処理します(したがって2秒待つ必要はありません)。


/dev/udp代わりにbashの組み込み機能を使用したい場合インターネット猫またはソカットこれにより、2つの半二重コマンド(1つは書き込み専用、もう1つは読み取り専用)で全二重ソケットを処理するのが少し複雑になります。この非対話型のケースでは、最初の出力コマンドを分岐する必要はありません。それ以外の場合、より複雑な場合は、出力と入力が並列に動作するように前の;コマンドをdd置き換えることができます。&それでもdd1つのパケットを保持して完了する必要があるため、xxdブロックを防ぐことができます。

( echo cfc9 0100 0001 0000 0000 0000 0a64 7563 6b64 7563 6b67 6f03 636f 6d00 0001 0001 | xxd -p -r >&3; dd bs=9000 count=1 <&3 2>/dev/null | xxd ) 3>/dev/udp/10.42.0.1/53

おすすめ記事