Linux

如何從我的 Linux ASUS 路由器發送 UDP 數據包?

  • October 1, 2021

我已經更改了路由器上的韌體,unanme -a產生:

Linux RT-AC86U-8458 4.1.27 #2 SMP PREEMPT Fri Aug 6 18:32:35 EDT 2021 aarch64 ASUSWRT-Merlin

我已經登錄到這個路由器的 ssh,我試圖弄清楚如何將一個 UDP 數據包從這個主機發送到我網路上的另一個主機。

這是我嘗試過的(全部失敗):

echo -n "hello world" | /dev/udp/serverip/15243
# /dev/udp/ doesnt exist

# or

echo -n "hello world" | nc -4u -w0 serverip 15243
# fails with 4 being an invalid option

# or

echo -n "hello world" | nc -u -c serverip 15243
# fails with u being an invalid option

如何從該主機發送 UDP 數據包?

ASUSWRT-Merlin git 儲存庫的簡短瀏覽會話告訴我 ASUSWRT-Merlin 使用Busybox 版本 1.25.1來實現nc.

在撰寫本文時,BusyBox 的目前上游版本是 1.34.1

更具體地說,ASUSWRT-Merlin 似乎使用了舊版本的 BusyBox ,沒有配置ENABLE_NC_110_COMPAToption,這將在其nc命令中添加 UDP 支持和其他一些東西:

CONFIG_NC=y
# CONFIG_NC_SERVER is not set
CONFIG_NC_EXTRA=y
# CONFIG_NC_110_COMPAT is not set

通過僅將上面程式碼片段中的最後一行更改為CONFIG_NC_110_COMPAT=y並僅重建 BusyBox 組件或整個 ASUSWRT-Merlin 韌體,您將獲得所需的功能。

但正如 Steffen Ullrich 評論的那樣,ASUSWRT-Merlin 還包括socat。嘗試:

echo -n "hello world" | socat - UDP:serverip:15243

socat有多種使用UDP的模式。如果使用 justUDP:對您不起作用,您可以嘗試UDP-DATAGRAM:UDP-SENDTO:代替,例如。

引用自:https://unix.stackexchange.com/questions/671463