ポート範囲内のすべてのポートが成功した場合にのみnetcatを強制的に成功させることはできますか?

ポート範囲内のすべてのポートが成功した場合にのみnetcatを強制的に成功させることはできますか?

私はこれを検証スクリプトの一部として使用し、nc予想される出力と比較して、リストされた各コマンドの出力を確認します。nc

例えば、

nc -zvw1 serv1.host.com 443 | gawk '{print $7}' Expected output: succeeded!

私が直面している問題は、ポート範囲を確認したい場合は、一部のテストが実際に返される可能性がありますがsucceeded!保証できないことです。みんなポートはそのまま返されます。コマンドと予想されるcmd:output出力をリストした構成ファイルと比較しているため、これが問題になります1:1

次のようなものをリストする代わりに:

nc -zvw1 serv1.host.com 443 | gawk '{print $7}' nc -zvw1 serv1.host.com 444 | gawk '{print $7}' nc -zvw1 serv1.host.com 445 | gawk '{print $7}'

Expected result: succeeded! Expected result: succeeded! Expected result: succeeded!

nc私は失敗を強制できるようにしたいです。どの範囲内のポートにエラーが発生するため、この場合、構成は次のように単純化できます。

nc -zvw1 serv1.host.com 443-445 | gawk '{print $7}' Expected result: succeeded!

残念ながら、これは簡単な問題の長い説明です。謝る

答え1

これはうまくいくかもしれません:

seq 443 445 \
| xargs -n1 sh -c 'nc -zvw1 serv1.host.com $0 >/dev/null 2>&1 || (echo error! && exit 255)' 2>/dev/null \
&& echo succeeded!

デフォルトでは、ポート範囲を使用してシミュレートseqし、戻り値をxargs利用して、指定された各ポート番号への接続が中断または成功したときに設定します。ncecho error!exit 255xargsecho succeeded!

関連情報