Shell

在 OpenBSD 中關閉 hping 的緩衝

  • November 25, 2013

當管道傳輸到進一步的逐行處理時,輸出似乎hping完全緩衝的,因此管道 hping 到 perl不起作用。perl

hping --icmp-ts example.ca | perl -ne 'if (/Originate=(\d+) Receive=(\d+) Transmit=(\d+)/) { ($o, $r, $t) = ($1, $2, $3); } if (/tsrtt=(\d+)/) { print $r - $o, " ", $o + $1 - $t, "\n"; }'

如何在管道傳輸時將 hping 從完全緩衝更改為行緩衝

不是以下問題的重複,因為在 OpenBSD 基礎中沒有解決方案有效:

關閉管道中的緩衝

兩種常見的解決方案stdbufunbuffer

stdbuf來自 GNU coreutils,它是在 2009 年的 7.5 版中添加的,因此它已進入除 CentOS 5 之外的所有目前非嵌入式 Linux 系統。自 8.4 版以來它也在 FreeBSD 中。據我所知,目前還沒有其他 unix 變體採用它,尤其是 OpenBSD 5.4 版本。

unbuffer是一個Expect腳本,因此在任何可以使用 Expect 的地方都可以使用,其中幾乎包括任何 unix。所有 BSD 變體都在其埠集合中,在expert包中。

所以安裝expect包並執行unbuffer hping … | perl …

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