2017-10-04 13 views
0

私は元の質問に答えていて、トピックを変更したくないので新しい質問を開きます。シェルスクリプト同じIP /ポートを使用して接続している場合に警告します

私は2つの別々のポートに入ってくる複数の接続を監視しようとしているが、同じIPの

netstat -an |grep 000 
101.101.101.101:2000  ESTABLISHED 
101.101.101.101:2000  ESTABLISHED 
101.101.101.102:3000  ESTABLISHED 
101.101.101.102:3000  ESTABLISHED 
101.101.101.102:3000  ESTABLISHED 
101.101.101.102:3000  ESTABLISHED 

で私は何をしようとしていることは、カラム1と場合を印刷するnestatやawkのあるい1001.1001.1001.1001:200は、10.1001.1001.1001が1つの接続が欠落していることを依然として警告している場合、アラートの意味より2倍の出力ではありません。

さらに10.1001.1001.102:3000はそれが存在していても警告3 ti netstatの出力でのMES:ここ

は、IPだけで失敗しないように警告するために、一度に存在している以外のすべての良いですが、私の現在のコードです:

connections=('101.101.101.101' '101.101.101.102') 
running=($(netstat -an |grep 000 |awk '{print $1}')) 
non_running=() 
for process_name in ${connections[@]}; do 
    if [[ "${running[*]}" == *$process_name* ]]; then 
     echo "$process_name is running" 
    else 
     echo "$process_name is not running" 
    fi 
done 

答えて

0

私はまだ上の非常に明確ではありませんよ要件。最初のフィールドは$process_nameですが、netstatの出力ではaddr:portの組み合わせになります。 LinuxとBSDの両方の実際の出力には、最初のフィールドとしてのプロトコルがあります。また、あなたは確立された接続だけを見ているようですが、netstatの-aスイッチを使用すると、リスニングソケットも印刷されますか?

だからあなたの出力は、上記のように見える、私はPerlで、このようにそれを行うだろうと仮定:

#!/usr/bin/perl 
use strict; 
use warnings; 

my %minimum = (
    '101.101.101.101:2000' => 2, 
    '101.101.101.102:3000' => 5, 
); 
my %count; 

open my $fh, '-|', 'netstat -an' or die "could not run netstat: $!"; 
while(<$fh>) { 
    next unless /^([0-9.]+:\d+000) /; 
    $count{$1}++; 
} 
close $fh; 

while(my ($ip_port, $min) = each %minimum) { 
    $count{$ip_port} ||= 0; 
    next if $count{$ip_port} >= $min; 
    print "$ip_port: need $min connections, found only $count{$ip_port}\n"; 
} 

おそらく読み取りループで正規表現を適応する必要があります。アクティブなTCP接続とプロセス名を取得するにはnetstat -tpnを使用します。その出力は次のようになります。

tcp  0  0 172.30.252.100:39056 52.216.18.58:80   ESTABLISHED 2000/chrome   
+0

ありがとう@mbethke! 私のシステム上で実行しようとしましたが、以下のエラーが発生しました: 'perlconnections.pl行の数値ge(> =)で初期化されていない値を使用します。 perlconnections.plで連結されていない値 101.101.101.101:2000:接続が2つしか必要ありません。 perlconnections.pl行で数値ge(> =)で初期化されていない値を使用します。 perlconnectionsで連結(。)または文字列で未初期化値を使用します。 pl行20 101.101.101.102:3000:5つの接続が必要、見つかったのは – connollyc4

+0

です。確立された接続しか探していないので、必要ありません。私の実際の環境では、私は第四の分野を探しています。私はちょうど質問を簡素化するために最初に提出しました。私のnetstatはあなたのものと似ています:tcp 0 0 172.30.252.100:39056 52.216.18.58:80 ESTABLISHED 2000/chrome ' ' – connollyc4

+0

あなたはそうです。私はそれを防ぐための行を追加しました。 – mbethke

関連する問題