最近、私は私たちの組織のいくつかのサブネットでオンになっているコンピューターの数を決定するタスクに直面しました。 ネットワークはひどく実行されています。ドメインもリモートインストールツールもないため、すべてのコンピューターに監視エージェントをインストールすることはできませんでした。 一方、多くのコンピューターで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 」 ;
?>
しかし、もちろん、このようなスクリプトは継続的な監視には適していません。 まず、バックグラウンドで常に動作するようにします。 第二に、チェックは複数のスレッドで実行する必要があります-これは高速です。
私はこのようにスクリプトを書き直しました:
- ネットワーク設定とアドレスは、iniファイルから読み取られます。
- 「dad」スクリプトは、各ネットワークの子スクリプトのインスタンスを起動し、その動作を制御します。
- 子スクリプトは、ネットワーク内のすべてのアドレスを円でチェックし、Memcachedの情報を更新します。 アクティブなノードの数に加えて、それらのmac、dns、およびnetbios名も記憶されます。
- memcachedから、このデータはWebページまたはzabbixで表示できます。
禁欲的な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の代わりに通常のファイルを使用できます。