OpenBSDで 'hping'バッファリングをオフにする

OpenBSDで '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ベースではソリューションが機能しないため、次の質問と重複しません。

パイプラインでバッファリングをオフにする

答え1

持つ2つの一般的なソリューションstdbufそしてunbuffer

stdbufGNU coreutilsからのこの機能は2009年バージョン7.5に追加されたため、CentOS 5を除く現在のすべての非組み込みLinuxシステムに適用されました。バージョン8.4以降、FreeBSDにもあります。私が知っている限り、他のUNIXバリアントはそれを採用していません。特にOpenBSD 5.4ではさらにそうです。

unbuffer予想されるスクリプトは、ほとんどすべてのUNIXを含むどこでも使用できます。 Expectを使用できます。すべてのBSDバリアントはexpertポートコレクションのパッケージに含まれています。

expectパッケージをインストールして実行します。unbuffer hping … | perl …

答え2

別のオプションは、次のものを使用することですsocat

# cf. http://unix.stackexchange.com/a/25377
socat EXEC:'hping --icmp-ts example.ca',pty,ctty STDIO | perl -ne 'if ...

関連情報