web-dev-qa-db-ja.com

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

次の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/53などのコマンドを使用すると、Wiresharkで「不正な形式のパケット」エラーが発生します。

Enter image description here

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

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

15
user322500

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

ただし、それがポート53に宛てられているため、WiresharkはそれをDNSパケットとして解析しようとしますが、実行できません(「this is a test」という文字列は RFC 1035 による有効なDNSリクエストではないため) =スペック)。

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

41
nanofarad

リダイレクションを使用して、それらをBashの特殊なエイリアスに送信できます。

Bashのマンページから:

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

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

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

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