3

監視スクリプトを作成しようとしています。サーバー上のポートに接続し、出力を読み取り、出力が期待値の場合は1を出力し、そうでない場合は0を出力する必要があります。

私はを含む解決策に取り組んでいますcat < /dev/tcp/hostname/portが、解決策は私にはわかりません。多分何かが期待を含む?私はbashスクリプトソリューションを好みます。感謝します!

4

6 に答える 6

3

他のすべてのソリューションはネットワーク サポートに netcat を使用しますが、bash が十分に新しく、コンパイルされている場合は、それを廃止できます--enable-net-redirections(つまり、私が知る限り、Debian と Ubuntu を除くすべてです。調整する必要がある場合は、お気軽にコメントしてください。 )。

その後grep、実際のテストを行うことができます。その戻りコードはシェル 1 (成功の場合は 0、失敗の場合はゼロ以外) であるため、それを反転する必要がありますが、問題なくbash処理されます。

手短に:

< /dev/tcp/host/port grep -q 'expected value'
echo $(( 1 - $? ))
于 2013-11-14T08:15:45.420 に答える
2

netcatを使用できます:

echo "GET /"|netcat google.com 80

次に、出力を処理スクリプトにパイプします

于 2010-01-15T09:56:34.343 に答える
2
#!/bin/bash
EXPECTED="hello"
SERVER="example.com"
PORT="123"

netcat $SERVER $PORT | grep -F -q "$EXPECTED"

if [ $? ]; then
  echo 1
else
  echo 0
fi
于 2010-01-15T12:46:53.043 に答える
1

popen アプローチを使用することをお勧めします。そうすれば、好きなコマンド(つまりnc)で読み取り、出力を繰り返し処理できます。これはすべて、必要に応じて bash スクリプトによって生成できます。

例えば:

#!/usr/bin/env ruby

IO.popen("nc host 4560") do |stdout|
   while line = stdout.gets
      if line =~ /pattern/
         puts "1"
      else
         puts "0"
      end
   end
end

pattern明らかに、探していたものに置き換える必要があります。これには、コマンドの出力全体ではなく、各行を比較できるという利点があります。あなたの場合、どちらが好ましいかわかりません。expect行ごとのアプローチが必要だとあなたが言及していると思います。

于 2010-01-15T12:58:59.263 に答える
1

ここにはほとんど例がありません。参考にすることができます。ただし、ポートで実行されているサービスと、それが話すプロトコルにも依存することに注意してください。

Web サーバーに接続している場合、共通ポートは 80 です。ただし、サーバーとして実行している独自のアプリケーションを実行している場合は、スクリプトが相互に「対話」する方法を知っていることを確認してください。

ここで見ることができる別のリソース。ただし、それは gawk であるため、gawk をお持ちの場合は、試してみることをお勧めします。(bashに「移植」することもできます)

于 2010-01-15T09:35:27.003 に答える