UDPパケットを作成するにはどうすればよいですか?


15

次のNetcatコマンドを実行してWiresharkでパケットを表示すると、UDPパケットが不正な形式であると表示されます。

$ echo "this is a test" | nc -u 127.0.0.1 53

同様に、$ echo "this is a test" > /dev/udp/127.0.0.1/53Wiresharkで「不正なパケット」エラーを生成するようなコマンドを使用すると。

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

echoコマンドは、エラーなしでNetcatサーバーに送信/配信されます。しかし、これは私に不思議に思いました:エコーまたは他のネイティブUnixツールで適切なUDPパケットを手動で構築することは可能ですか?

DebianとmacOSを使用しています。


10
スクリーンショットによると、ポート53はDNSに使用され、パケットには有効なDNS要求が含まれていないため、udp-packet自体が不正な形式ではなくコンテンツです。
tkausl

@tkauslあなたは絶対に正しい。53以外のポートを使用する場合、「不正な」エラーはありません。ご指摘いただきありがとうございます。
user322500

1
標準プロトコルを使用していない場合、49152から65535の範囲のポートを使用することになっています。Linuxはデフォルトで一時ポートとして32768から60999の範囲を使用するため、非標準プロトコルにも使用しないことをお勧めします。ただし、61000から65535は、非標準のプロトコルでは公平なゲームです。私は通常echo $[61002+RANDOM%4532]、その範囲でランダムなポート番号を選択するために使用します。
カスペルド

1
rootとしてログインしないでください。ほとんどのアクティビティは非rootユーザーとして実行する必要があります。rootとして作業する場合は、ここに戻ってマシンの修正方法を尋ねますが、支援はできません(再インストールを推奨する場合を除く)。
ctrl-alt-delor

1
あなたは答えとしてあなたのコメントを投稿していないために失ったものを@tkauslルック....
ジョージ・バジリウー

回答:


41

IPとUDPの観点から、パケットは完全に有効です。Wiresharkの下部ペインでイーサネット/ IP / UDPのプロトコルの詳細を展開すると、パケットが正常に解析されていることがわかります。

ただし、ポート53向けであるため、WiresharkはそれをDNSパケットとして解析しようとしますが、これは実行できません(「this is a test」という文字列はRFC 1035仕様による有効なDNS要求ではないため)。

そのリンクで仕様に従うと、DNS要求として解析されたときに有効なパケットを構築できます。パケットを別のポートに送信すると、WiresharkがそれをDNS要求として解析しなくなり、その警告が表示されなくなることに気付くでしょう。


15

リダイレクトを使用して、Bashの特別なエイリアスに送信できます。

Bashのマンページから:

/ dev / tcp / host / port hostが有効なホスト名またはインターネットアドレスであり、portが整数のポート番号またはサービス名である場合、bashは対応するTCPソケットを開こうとします。

/ dev / udp / host / port hostが有効なホスト名またはインターネットアドレスであり、portが整数のポート番号またはサービス名である場合、bashは対応するUDPソケットを開こうとします。

これにより、UDPパケットが192.168.2.11からポート8080に送信されます。

echo "This is a test" > /dev/udp/192.168.2.11/8080

この答えをありがとう。質問を更新しました。残念ながら、メソッドを使用すると「不正な形式のパケット」エラーメッセージも生成されます。
user322500

-1

ここには複数の質問があります。「不正なパケット」の主張は、チェックサムオフロードが原因である可能性があり、それが完全なビューを持たないパケットキャプチャを反映している場合の誤ったエラーである可能性があります。一部の作業は代わりにネットワークハードウェアで行われました。WireSharkにはこれに関するドキュメントが必要です。

それ以外の場合は、(のような様々なツールsocatncまたはnetcat、またはのような殻に非常に似たような機能を介したksh93かはbash)標準入力からバイトを取るとUDPパケットになり何にそれらをダンプすることができます。これが「適切」かどうかは、プロトコルによって異なります。理論的には、この方法でDNSまたはDHCPパケットを構築して送信できますが、多くの場合、問題のプロトコルを(できれば)正しく実装するライブラリまたは専用ソフトウェアを使用します。パケットの本文と、それを回線経由で送信します。特に応答の処理、タイムアウトまたはエラー後の再試行、パケットヘッダーフィールドなどです。プロトコルは通常、RFCで非常によく文書化されています。さらに多くのドキュメントについてはスティーブンスによって。

などの特定のツールはnmap、パケットの構築で非常にカスタムなことを行います。それ以外の場合、手動のパケット構築には通常プログラミング言語が使用されますが、やはりほとんどのソフトウェアは既存のライブラリまたはシステムサービスを使用してDNSまたはDHCPまたはその他のUDPパケットを送信します。最初からパケット。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.