URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 55209
[ Назад ]

Исходное сообщение
"Статистика по включенным компьютерам в сети."

Отправлено Сергей Петров , 05-Апр-05 19:47 
Есть задача - нужно мониторить, когда какой компьютер в сети включен, а когда выключен. Нет ничего проще, чем написать что-нить вроде

nmap -sP 192.168.1.* > /dev/null; arp -a|grep ether|awk {'print $2'}|tr -d "()"

Потом все это причесать сделать так, что это записывалось в базу данных, запихнуть в крон и сделать нормальный вывод статистики.

********************************
Вопрос в следующем:
nmap - это мировое зло. если я записывать в крон эту команду, то раз в n минут создается паразитная нагрузка на сеть. Конечно она небольшая, но все равно есть, а очень хотелось бы, чтобы ее не было.

Есть несколько вариантов, но у всех есть свои недостатки

1. Не делать nmap а просто смотреть по arp таблице. Тут недосток в том, что компьютер может долго не делать никакую сетевую активность, тогда в логах он будет как будто выключен.

2. Сделать список машин и пинговать только их. Тут проблема в том, что может повявиться новая машина, но программой сбора статистики она не будет замечена.


Вообщем буду очень рад любым мыслям по этому поводу!

Заранее спасибо за ответ и спасибо, что прочитали такое большое сообщение. =)


Содержание

Сообщения в этом обсуждении
"Статистика по включенным компьютерам в сети."
Отправлено MaximKuznetsov , 05-Апр-05 22:23 
>Есть задача - нужно мониторить, когда какой компьютер в сети включен, а
>когда выключен. Нет ничего проще, чем написать что-нить вроде

Интересует именно алгоритм ?
Хватаем все пакеты приходящие на хост,
  если источника нет в куче, добавляем и пишем в лог что появился
  если известен, обновляем метку времени,
  периодически смотрим у кого слишком старая метка времени, того исключаем    из кучи и пишем в лог, что отключился.
УСЁ..

прим1. хватать можно только заголовки пакетов, была-бы адресная часть
прим2. перевод хоста с промиск вряд-ли поможет, современные свичи и так отрежут всё лишнее
прим3. алг. настолько элементарен, что как правило ищутся более сложные решения


"Статистика по включенным компьютерам в сети."
Отправлено dimus , 06-Апр-05 15:36 
Почему бы просто не пинговать все машины в подсети и смотреть, какие откликаются.

Что-то вроде этого. Можно легко сделать на shell-script или C/C++

i = 1;
while( i < 255 )
{
   sprintf( ip_addr, "192.168.0.%d", i );
   if( call_ping( ip_addr ) )
   {
     printf( "Host %s is up\n", ip_addr );
   }
}


"Статистика по включенным компьютерам в сети."
Отправлено Сергей Петров , 06-Апр-05 16:12 
>Почему бы просто не пинговать все машины в подсети и смотреть, какие
>откликаются.
>Что-то вроде этого. Можно легко сделать на shell-script или C/C++
>i = 1;
>while( i < 255 )
>{
>   sprintf( ip_addr, "192.168.0.%d", i );
>   if( call_ping( ip_addr ) )
>   {
>     printf( "Host %s is up\n", ip_addr );
>
>   }
>}

Спасибо большое за твой ответ, но только что твой вариант, что использование nmap - дает дополнительную нагрузку на сеть, котрой хотелось бы избежаить (если это возможно, конечно)


"Статистика по включенным компьютерам в сети."
Отправлено fa , 06-Апр-05 17:35 
>Почему бы просто не пинговать все машины в подсети и смотреть, какие
>откликаются.
>
>Что-то вроде этого. Можно легко сделать на shell-script или C/C++
>
>i = 1;
>while( i < 255 )
>{
>   sprintf( ip_addr, "192.168.0.%d", i );
>   if( call_ping( ip_addr ) )
>   {
>     printf( "Host %s is up\n", ip_addr );
>
>   }
>}

А что делать, если народ фаерволится?


"Статистика по включенным компьютерам в сети."
Отправлено Сергей Петров , 06-Апр-05 16:10 
>Интересует именно алгоритм ?

Точно! =)

>Хватаем все пакеты приходящие на хост,
>если источника нет в куче, добавляем и пишем в лог
>что появился  если известен, обновляем метку времени,
>периодически смотрим у кого слишком старая метка времени,
>того исключаем
>из кучи и пишем в лог, что отключился.
>УСЁ..

Значит так. Вообщем эта система включенных-выключенных компов будет сидеть на единственном сервере в сети - на той машине, которая у всех прописана гойтом и которая раздает всем инет. То есть, можно предположить, что машины все время будут что-то хотеть от этого сервера и сервер будет все время ловить пакеты от них.

Честно говоря, я не очень понимаю, зачем выпендриваться-ловоить пакеты. Если пакет пришел, то сервер автоматически апгрейдет свою таблицу мак адресов. То есть можно просто смотреть таблицу. (пожалуйста, поправьте меня если я не прав). Простблема в другом - если мы будем раз в n минут смотреть эту таблицу - есть вероятность, что мы попадем в том момент, когда компьютер включен, но записть в арп таблице на сервере устарела и в логах он будет показан как выключенный (именно для этого в скрипте, который я приводил в первом посте сначала идет nmap, чтобы было какое-то общение с машинами и арп таблица обновилась). Но, как я уже говорил - nmap - это зло - нафиг нужна дополнительная нагрузка на сеть если ее можно избежать (я очень надеюсь, что ее можно избежать =)

>прим1. хватать можно только заголовки пакетов, была-бы адресная часть
>прим2. перевод хоста с промиск вряд-ли поможет, современные свичи и так >отрежут всё лишнее

Извини, 2-ое примечание немножко не понял, может быть "в" промиск?

>прим3. алг. настолько элементарен, что как правило ищутся более сложные >решения

Если не сложно, пожалуйста, расскажи об альтернативных вариантах?

Заранее большое спасибо.



"Статистика по включенным компьютерам в сети."
Отправлено Maxim Kuznetsov , 06-Апр-05 17:12 
>>Интересует именно алгоритм ?
>
>Точно! =)
>
>>Хватаем все пакеты приходящие на хост,
>>если источника нет в куче, добавляем и пишем в лог
>>что появился  если известен, обновляем метку времени,
>>периодически смотрим у кого слишком старая метка времени,
>>того исключаем
>>из кучи и пишем в лог, что отключился.
>>УСЁ..
>
>Значит так. Вообщем эта система включенных-выключенных компов будет сидеть на единственном сервере
>в сети - на той машине, которая у всех прописана гойтом
>и которая раздает всем инет. То есть, можно предположить, что машины
>все время будут что-то хотеть от этого сервера и сервер будет
>все время ловить пакеты от них.
>
>Честно говоря, я не очень понимаю, зачем выпендриваться-ловоить пакеты. Если пакет пришел,
это не то чтобы выпендриваться, просто так проще..я для таких целей использую таргет ULOG в iptables и _очень_ доволен результатом.
>то сервер автоматически апгрейдет свою таблицу мак адресов. То есть можно
>просто смотреть таблицу. (пожалуйста, поправьте меня если я не прав).  
arp таблица это только если все машины в одной локалке..
(и arpwatch тут может помоч)
а как только появится сеть отделенная роутером - все пакеты из нее будешь получать с одним мак`ом.., плюс таким алгоритмом Вы можете следить и за активностью внешних машин и живостью каналов(с некоторой додумкой/доработкой).

>в другом - если мы будем раз в n минут смотреть
>эту таблицу - есть вероятность, что мы попадем в том момент,
>когда компьютер включен, но записть в арп таблице на сервере устарела
>и в логах он будет показан как выключенный (именно для этого
>в скрипте, который я приводил в первом посте сначала идет nmap,
>чтобы было какое-то общение с машинами и арп таблица обновилась). Но,
>как я уже говорил - nmap - это зло - нафиг
>нужна дополнительная нагрузка на сеть если ее можно избежать (я очень
>надеюсь, что ее можно избежать =)
>
>>прим1. хватать можно только заголовки пакетов, была-бы адресная часть
>>прим2. перевод хоста с промиск вряд-ли поможет, современные свичи и так >отрежут всё лишнее
>
>Извини, 2-ое примечание немножко не понял, может быть "в" промиск?
да - конечно-же 'В' - просто опечатался
>>прим3. алг. настолько элементарен, что как правило ищутся более сложные >решения
>
>Если не сложно, пожалуйста, расскажи об альтернативных вариантах?
а это как раз упомянутые 'пинговать всех', запускать nmap, поставить каждому клиенту по агенту etc..

>Заранее большое спасибо.



"Статистика по включенным компьютерам в сети."
Отправлено Y , 06-Апр-05 16:09 
fping в этой ситуации очень удобная вещь

"Статистика по включенным компьютерам в сети."
Отправлено Сергей Петров , 06-Апр-05 16:18 
>fping в этой ситуации очень удобная вещь

Спасибо большое! Не знал, что есть такая утилитка.

Но имхо нет никакой разницы, что использовать - nmap, fping или небольшой сприпт с ping-ом. Все равно создается дополнительная нагрузка на сеть, чего бы очень хотелось избежать.

Мысли вслух - у нас может быть 2 варинта общения с сетью - активное (то есть что то делать) и пассивное (то есть только слушать).

Соответственно пассивное не дает никакой дополнительной нагрузки на сеть, а активное дает. То есть в я бы хотел просто слушать сеть, но думаю, что это не очень рационально - некоторые машины могут долгое время "молчать" и тогда они будут выглядеть как выключенные.


"Статистика по включенным компьютерам в сети."
Отправлено Z0termaNN , 06-Апр-05 23:02 
>>fping в этой ситуации очень удобная вещь
>
>Спасибо большое! Не знал, что есть такая утилитка.

вообще-то достаточно ping послать по broadcast адресу (если конечно все
машины в одном сегменте) и ловить reply.
>
>Но имхо нет никакой разницы, что использовать - nmap, fping или небольшой
>сприпт с ping-ом. Все равно создается дополнительная нагрузка на сеть,

ты что обалдел ? какая нагрузка на сеть ? от пары тысяч пакетов в час ?

если уж тебе совсем слиплось смотреть кто сейчас в сети, то поставь
себе, например DECnet, и  будет тебе счастье


"Статистика по включенным компьютерам в сети."
Отправлено bessarabov , 07-Апр-05 01:05 
>вообще-то достаточно ping послать по broadcast адресу (если конечно все
>машины в одном сегменте) и ловить reply.

Спасибо большое за совет - не знал.

>ты что обалдел ? какая нагрузка на сеть ? от пары тысяч
>пакетов в час ?

Если можно этого избежать - то почему бы так не сделать? (блин, раньше прогрммисты боролись за каждый байт памят - а счаз - пару тысяч сюда - пару тысяч туда... =(

>если уж тебе совсем слиплось смотреть кто сейчас в сети, то поставь
>себе, например DECnet, и  будет тебе счастье

Слушай, я правльно понял, что DECnet - это http://en.wikipedia.org/wiki/DECnet ? или это что-то другое? (если это то, что написанно в вики - то тогда твой ответ - это назад в пещеры?)


"Статистика по включенным компьютерам в сети."
Отправлено Z0termaNN , 07-Апр-05 10:27 
>>вообще-то достаточно ping послать по broadcast адресу (если конечно все
>>машины в одном сегменте) и ловить reply.
>
>Спасибо большое за совет - не знал.
>
>>ты что обалдел ? какая нагрузка на сеть ? от пары тысяч
>>пакетов в час ?
>
>Если можно этого избежать - то почему бы так не сделать? (блин,
>раньше прогрммисты боролись за каждый байт памят - а счаз -
>пару тысяч сюда - пару тысяч туда... =(
>

было и такое, только сейчас ресурсы, как правило дешевле, чем затраты на
оптимизацию.

>>если уж тебе совсем слиплось смотреть кто сейчас в сети, то поставь
>>себе, например DECnet, и  будет тебе счастье
>
>Слушай, я правльно понял, что DECnet - это http://en.wikipedia.org/wiki/DECnet ? или это
>что-то другое? (если это то, что написанно в вики - то
>тогда твой ответ - это назад в пещеры?)

ну почему же сразу в пещеры ? DECnet очень даже нормальный протокол,
и писать на нем сетевые приложения на порядок легче, чем на IP. Хотя
про DENnet, это так к слову в качестве примера, т.к. поддерживает его
уже ограниченный набор оборудования.


"Статистика по включенным компьютерам в сети."
Отправлено jonatan , 07-Апр-05 08:58 
Windows 2000/XP, например, на ping broadcast по умолчанию не отвечают.

"Статистика по включенным компьютерам в сети."
Отправлено ImnepaTop , 07-Апр-05 09:30 
Юзай nagios или zabbix.



"Статистика по включенным компьютерам в сети."
Отправлено Serg , 07-Апр-05 11:38 
Чего-то вы человека совсем запутали ...
В общем если надо следить за машинами в пределах одной подсетки, тода юзай arping ... юзерские фаерволы побоку будут ...
Можно скрипт написать, что-то типа:

#!/bin/bash

arping -c 2 $1

if (( $? )) ; then
   echo "$1     OFF"
else
   echo "$1     ON"
fi

Добавь сюда цикл для своей подсетки ... результат можно прямо в БД писать ... либо html генерировать с картой сети ... в общем на что фантазии хватит :)