如何创建UDP数据包?

use*_*500 15 linux osx debian udp netcat

当我执行以下 Netcat 命令并使用Wireshark查看数据包时,它说 UDP 数据包格式错误。

$ echo "this is a test" | nc -u 127.0.0.1 53
Run Code Online (Sandbox Code Playgroud)

同样,$ echo "this is a test" > /dev/udp/127.0.0.1/53在 Wireshark 中使用诸如产生“格式错误的数据包”错误之类的命令。

在此处输入图片说明

echo 命令被发送/传递到 Netcat 服务器,没有错误。但这让我想知道:是否可以使用 echo 或其他一些本机 Unix 工具手动构建正确的 UDP 数据包?

我正在使用 Debian 和 macOS。

nan*_*rad 41

从 IP 和 UDP 的角度来看,您的数据包是完全有效的。如果在 Wireshark 的下部窗格中展开 Ethernet/IP/UDP 的协议详细信息,您将看到数据包已成功解析。

但是,由于它的目的地是端口 53,Wireshark 尝试将其解析为 DNS 数据包,但它不能这样做(因为根据RFC 1035规范,字符串“这是一个测试”不是有效的 DNS 请求)。

如果您遵循该链接上的规范,您将能够构建一个在解析为 DNS 请求时有效的数据包。如果您将数据包发送到另一个端口,您会注意到 Wireshark 将不再将其解析为 DNS 请求,因此不会显示该警告。


rAl*_*len 16

您可以通过重定向将它们发送到 Bash 特殊别名。

从 Bash 联机帮助页:

/dev/tcp/host/port 如果 host 是有效的主机名或 Internet 地址,并且 port 是整数端口号或服务名,bash 会尝试打开相应的 TCP 套接字。

/dev/udp/host/port 如果 host 是有效的主机名或 Internet 地址,并且 port 是整数端口号或服务名,bash 会尝试打开相应的 UDP 套接字。

这会将 UDP 数据包发送到 192.168.2.11 到端口 8080:

echo "This is a test" > /dev/udp/192.168.2.11/8080
Run Code Online (Sandbox Code Playgroud)