netcatでprintfを使う

netcatでprintfを使う

出力を切り替えることができる「IPリレーデバイス」にTCPメッセージを送信する小さなコマンドを作成しました。

printf "setstate,1:1,1\r" | nc ip.ip.ip.ip port

時にはこれが実際にうまく機能することがあります。 printfはLinuxとMacの両方で動作するので、netcatで何かをする必要があると思いました。 netcatで-vを使用すると、正しい実行回数が向上することがわかりましたが、非常に退屈な解決策のように見えました。

後で1秒のタイムアウトを追加するnc -iオプションが見つかりました。このオプションはまだエラー(LinuxまたはOSX上)を引き起こしていませんが、実行時間を短縮しますが、それでも100%クリーンな修正ではありません。

これマニュアルページ実際にはncコマンドをパイプできることを示していますが、考えられる競合条件については言及しません。

これが予想される動作ですか?この問題を解決するためのきれいな方法はありますか? (例:「--接続が完了したときにのみ送信」)または実際に競合状態であることを確認できますか?

ベストアンサー1

アクティブな接続があるかどうかを確認できます。

nc -v <HOST> <PORT> </dev/null; echo $?

上記のコマンドが値を返すと、接続は成功し、0メッセージprintfを送信できます。それ以外の場合(値は1)、接続が拒否されたかタイムアウトしたことがわかります。

おすすめ記事