如何使用 socat 为每个 UDP 数据包运行命令?

如何使用 socat 为每个 UDP 数据包运行命令?

我正在尝试打印每个到达的 UDP 数据包。我想xxd打印 ascii 内容以及原始数据(十六进制)。

到目前为止我已经使用过 socat - udp4-listen:11255,reuseaddr,fork | xxd

这种方法可行,但xxd会缓冲输入,直到它可以打印完整的输出行。

我想socat为每个到达的 UDP 数据包执行一个新命令。我试过

socat -u udp4-listen:11255,reuseaddr,fork system:"/usr/bin/xxd - /tmp/foo"

它为每个数据包分叉一个新的xxd(这很好)但在传递数据包后保持其运行而不是关闭输入。

有没有办法socat在传递UDP数据包后关闭分叉进程的输入?

答案1

socat -u udp4-recvfrom:11255,reuseaddr,fork exec:"/usr/bin/xxd - /tmp/foo"

可以。区别在于使用udp4-recvfrom而不是udp4-listen。前者似乎按数据包处理输入,而后者将数据包连接成流。

相关内容