ネットワーク上のアクティブなホストの数を監視する

最近、私は私たちの組織のいくつかのサブネットでオンになっているコンピューターの数を決定するタスクに直面しました。 ネットワークはひどく実行されています。ドメインもリモートインストールツールもないため、すべてのコンピューターに監視エージェントをインストールすることはできませんでした。 一方、多くのコンピューターでpingリクエストに応答しなかったため、ファイアウォールが有効になりました。



この問題を解決するために、私は素晴らしいarpingユーティリティを使用しました。



それが起こったことです







ArpingはOSIモデルの第2レベルで動作し、ファイアウォールによってブロックされません。 IPパケットが届くように、コンピューターはARP要求に応答する必要があります。 pingと比較した場合のアーピングの欠点は、アーピングが同じローカルネットワーク内で機能し、ルーティングされないことです。 ただし、この制限はARPプロキシすることで回避できます



最初に、arpingを使用して単純なPHPスクリプト(これが私が知っている唯一の言語です☺)を作成しました。 ネットワークとマスクが設定され、スクリプトはそれらの各IPアドレスをループでpingします。

<?php

//ネットワークとマスクを設定します

$ subnets = array "192.168.0.0/255.255.255.0" "10.10.8.0/255.255.252.0" ;



$ up = 0 ; //ライブホストの数

foreach $サブネット $サブネット として

{

リスト $ addr $ mask = explode '/' $ subnet ;

//開始アドレスと終了アドレスを計算します

$ start = ip2long $ addr ip2long $ mask + 1 ;

$ end = $ start + 〜ip2long $ mask - 1 ;

//すべてのアドレスを調べ、それらをarpします

for $ ip = $ start ; $ ip <= $ end ; $ ip ++

{

$ response = shell_exec "arping -c 2" 。long2ip $ ip ;

if strstr $ response '0 packets received' $ up ++;

}

}

エコー $ up \ r \ n ;

?>




しかし、もちろん、このようなスクリプトは継続的な監視には適していません。 まず、バックグラウンドで常に動作するようにします。 第二に、チェックは複数のスレッドで実行する必要があります-これは高速です。



私はこのようにスクリプトを書き直しました: 禁欲的なWebインターフェイスでコンピューターのリストを確認できます。





また、Zabbixにグラフを追加しました(投稿の冒頭を参照)。

これを行うには、各ネットワークの行をzabbix_agentd.confファイルに追加します。

UserParameter=network_count. net_name ,/usr/local/bin/php / /get_network_stats.php net_name





サーバーに適切なアイテムを追加します。



そして、スケジュールを設定します。

get_network_stats.php <network name>スクリプトは、ネットワーク名ごとにアクティブなホストの数を返します。 他の監視システムのユーザーは、このスクリプトを簡単に添付できると思います。



私はソースを与えません 彼は大きいです。 ダウンロード -readmeが添付されています。

そのようなことを必要とする人は誰でもニーズに合わせて書き直すことができると思います。例えば、memcachedの代わりに通常のファイルを使用できます。



All Articles