我正在尝试打印每个到达的 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
。前者似乎按数据包处理输入,而后者将数据包连接成流。