3

我需要从标准输入读取十六进制数据,将其转换为二进制,使用 发送netcat,接收回复,转换回十六进制并打印到标准输出。我愿意:

# xxd -r -p | nc -u localhost 12345 | xxd

然后以十六进制输入我的数据,然后按 Enter。但是直到我按下它才会发送Ctrl+D,所以在收到回复后我无法发送另一个数据包。看起来xxd -r -p不写二进制数据,直到EOF给出。有没有办法让它在换行符之后写?

4

1 回答 1

3

默认情况下,大多数*nix 实用程序将在交互模式下进行行缓冲(例如,直接连接到终端仿真器的stdin/stdout)。但是在非交互模式下(例如连接到管道的标准输入/标准输出)通常使用更大的缓冲区——我认为 8k 左右是典型的,但这在很大程度上因实现/发行版而异。

您可以使用GNUstdbuf实用程序将给定进程的缓冲强制为行模式(如果有):

stdbuf -oL xxd -r -p | nc -u localhost 12345 | xxd
于 2014-04-29T00:23:26.303 回答