Страница 1 из 1
Пинг скрытых машин
Добавлено: 2013-03-11 14:58:57
Jetro
Итак, есть сеть с сотней машин, у которой нет ни домена, ни даже DHCP. Грустно, правда? Но это не самое страшное. Самое страшное то, что на всех машинах стоят форточки...
Так вот, в связи с тем что здесь нету DHCP, со временем с айпишниками началась полная неразбериха, дошло до того что свободные айпишники попросту закончились, а в сети болтаются около полутора сотни неиспользуемых.
Эту проблему я решил исправить с помощью старой-доброй "Фри", задумал отсеять свободные адреса. Сразу родилась идея шелл-скрипта, который при запуске пинговал-бы все адреса (fping), и все неактивные адреса записывал-бы в файл, а при следующем запуске их пиноговал снова и отсеивал те, что онлайн сегодня. Так за неделю можно было-бы на 95% отсеять все пустующие адреса.
Вроди ничего сложного, верно? За пол часа можно скрипт набросать. Но прям в процессе планирования я наткнулся на проблему, которую не знаю как решить - в Windows 7 по умолчанию отключено сетевое обнаружение, при чем если оно отключено, то машину пропинговать невозможно. Пингуешь машину - нет ответа, ставишь фряхе её айпишник, а она ругается что мол адрес занят аппаратом с таким-то МАКом.
Короче говоря не знаю как правильно реализовать задумку. Думал сделать скрипт, с которым фряха блуждала-бы по сети, то есть ставила айпишник проверяемого адреса, и после чего делала-бы отчет свободен адрес или нет, но мне кажеться что это перебор, идея бредовая.
Кто что подскажет? Кстати, а как можно получить МАК удаленной машины?
Re: Пинг скрытых машин
Добавлено: 2013-03-11 15:44:55
GhOsT_MZ
А как ведет себя nmap? И есть ли после попытки пинга мак-адрес в arp-таблице?
Re: Пинг скрытых машин
Добавлено: 2013-03-11 17:04:18
rayder
если все в пределах одной сети, то посмотрите в сторону arping
Re: Пинг скрытых машин
Добавлено: 2013-03-11 17:32:42
gumeniuc
arpwatch ?
Re: Пинг скрытых машин
Добавлено: 2013-03-11 17:51:40
Jetro
GhOsT_MZ писал(а):А как ведет себя nmap? И есть ли после попытки пинга мак-адрес в arp-таблице?
Об nmap почему-то не подумал. Сейчас буду эксперементировать, и смотреть что получиться.
По поводу ARP - после стандартного пинга МАК в таблице появляется, но если использовать fping, то этого не происходит. Сначала тоже подумал о том чтобы дергать маки с ARP, но первый минус здесь в том что данные полученные не при запросе, а берутся с записанной ранее таблицы, а второй что в таблице могут быть не все адреса, а для получения всего комаплекта стандартным пингом пинговать их не лучшая затея.
rayder писал(а):если все в пределах одной сети, то посмотрите в сторону arping
Об arping раньше не слышал. Буду сейчас смотреть что это за зверь.
gumeniuc писал(а):arpwatch ?
Нет, немного не то. У него назначение немного другое.
f_andrey писал(а):Автору. пожалуйста, выбирайте соответствующий раздел форума.
Даже и представить не мог что подобный вопрос обычно возникает у начинающих.... по этой причине и разместил его в ветке, которая на мой взгляд была самой подходящей.
Re: Пинг скрытых машин
Добавлено: 2013-03-11 18:29:53
GhOsT_MZ
Jetro писал(а):
Об nmap почему-то не подумал. Сейчас буду эксперементировать, и смотреть что получиться.
По поводу ARP - после стандартного пинга МАК в таблице появляется, но если использовать fping, то этого не происходит. Сначала тоже подумал о том чтобы дергать маки с ARP, но первый минус здесь в том что данные полученные не при запросе, а берутся с записанной ранее таблицы, а второй что в таблице могут быть не все адреса, а для получения всего комаплекта стандартным пингом пинговать их не лучшая затея.
Ну раз появляется, то отлично. nmap'ом сканируется вся подсеть, если он не находит ничего, то берем из ARP-таблицы.
А вот насчет "записанной ранее таблицы" немного не понял...
Как вообще это все должно работать. Мы шлем ICMP-пакет удаленному узлу, если он в нашей подсети, то необходимо знать на какой MAC-адрес слать пакет. Для этого существует протокол ARP (address resolving protocol, както так). Мы формируем Ethernet-кадр (в нашем случае), который отправляется по широковещательному адресу (ff:ff:ff:ff:ff:ff), далее, всем хостам, в рамках шировещательного домена, приходит этот кадр, и если MAC-адрес в запросе соответствует MAC-адресу сетевой платы, на который пришел кадр, то отправляется ARP-ответ. Далее, это соответствие MAC-адрес <--> IP-адрес записывается в ARP-таблицу, где живет опроделенное время (думаю, тут все зависит от реализации TCP/IP стэка конкретно взятой ОС).
Подводя итог. Если протокол ARP не блокируется на узле, то абсолютно плевать, как мы будем сканировать сеть, будь то просто пинги, а будь то стуки на какие-то TCP/UDP-порты, и более того, нам плевать на блокировку любых протоколо уровня 3+, пусть хоть входящие с сети 0.0.0.0/0 блокируют, побоку. И более того, данная информация будет наиболее достоверной, так как она находится ниже уровнем, нежели IP, а уж тем более UDP/TCP.
Кстати, если в сети много узлов, то советую сканировать частями. Просканировали 32 адреса (маска /27), сделали:
arp -a > c:\arp.1.txt
, для винды, или:
, для unix-like.
Re: Пинг скрытых машин
Добавлено: 2013-03-11 18:32:16
GhOsT_MZ
Jetro писал(а):Даже и представить не мог что подобный вопрос обычно возникает у начинающих.... по этой причине и разместил его в ветке, которая на мой взгляд была самой подходящей.
Не поверите, это на самом деле азы... Банально знание TCP/IP стека и модели OSI, что по сути азы сетей. Если это знать, то и проблем в принципе быть не может в этой ситуации)
Re: Пинг скрытых машин
Добавлено: 2013-03-11 19:08:50
werder31
удаляем все записи на интерфейсе
Пингуем всю сеть
смотрим таблицу
Выборка
Re: Пинг скрытых машин
Добавлено: 2013-03-11 19:15:05
Jetro
GhOsT_MZ писал(а):А вот насчет "записанной ранее таблицы" немного не понял...
Имелась ввиду ARP-таблица, записи в которой существуют определенное время. То есть пока я захочу получить данные о каком-то адресе, записи о нем уже может и не быть в ARP, или вообще там никогда не было.
GhOsT_MZ писал(а):
Мы шлем ICMP-пакет удаленному узлу, если он в нашей подсети, то необходимо знать на какой MAC-адрес слать пакет. Для этого существует протокол ARP (address resolving protocol, както так). Мы формируем Ethernet-кадр (в нашем случае), который отправляется по широковещательному адресу (ff:ff:ff:ff:ff:ff), далее, всем хостам, в рамках шировещательного домена, приходит этот кадр, и если MAC-адрес в запросе соответствует MAC-адресу сетевой платы, на который пришел кадр, то отправляется ARP-ответ. Далее, это соответствие MAC-адрес <--> IP-адрес записывается в ARP-таблицу, где живет опроделенное время.
Все основано на том что мы знаем МАК удаленной машины. А если такой информации нет? У меня нет желания обходить овер 100 машин для того чтобы переписать МАКи . С тем успехом можно и адреса переписать, и не париться.
GhOsT_MZ писал(а):Не поверите, это на самом деле азы... Банально знание TCP/IP стека и модели OSI, что по сути азы сетей. Если это знать, то и проблем в принципе быть не может в этой ситуации)
Банально знать азы TCP/IP стека - мало, нужно еще правильно реализовать решение задачи.
Мало знать с чего торт спекли, его еще приготовить уметь нужно...
Ладно, не столь важно. Для начинающих так для начинающих, не мне судить.
Re: Пинг скрытых машин
Добавлено: 2013-03-11 19:20:58
GhOsT_MZ
Jetro писал(а):GhOsT_MZ писал(а):А вот насчет "записанной ранее таблицы" немного не понял...
Имелась ввиду ARP-таблица, записи в которой существуют определенное время. То есть пока я захочу получить данные о каком-то адресе, записи о нем уже может и не быть в ARP, или вообще там никогда не было.
GhOsT_MZ писал(а):
Мы шлем ICMP-пакет удаленному узлу, если он в нашей подсети, то необходимо знать на какой MAC-адрес слать пакет. Для этого существует протокол ARP (address resolving protocol, както так). Мы формируем Ethernet-кадр (в нашем случае), который отправляется по широковещательному адресу (ff:ff:ff:ff:ff:ff), далее, всем хостам, в рамках шировещательного домена, приходит этот кадр, и если MAC-адрес в запросе соответствует MAC-адресу сетевой платы, на который пришел кадр, то отправляется ARP-ответ. Далее, это соответствие MAC-адрес <--> IP-адрес записывается в ARP-таблицу, где живет опроделенное время.
Все основано на том что мы знаем МАК удаленной машины. А если такой информации нет? У меня нет желания обходить овер 100 машин для того чтобы переписать МАКи . С тем успехом можно и адреса переписать, и не париться.
GhOsT_MZ писал(а):Не поверите, это на самом деле азы... Банально знание TCP/IP стека и модели OSI, что по сути азы сетей. Если это знать, то и проблем в принципе быть не может в этой ситуации)
Банально знать азы TCP/IP стека - мало, нужно еще правильно реализовать решение задачи.
Мало знать с чего торт спекли, его еще приготовить уметь нужно...
Ладно, не столь важно. Для начинающих так для начинающих, не мне судить.
Предлагаю изучить протокол ARP, он как раз выполняет эту функцию. Если в ARP-таблице нету записи соответствия IP <--> MAC, то посылается широковещательный кадр, на который приходит ответ, на основании которого и и заполняется ARP-таблица. Не надо обходить все рабочие станции, достаточно сделать пинг и сразу же посмотреть ARP-таблицу, если запись появилась, то узел включен, если нет - не включен. Все просто.
PS: не знаю, но мне почемуто хватало теоретических знаний для решения этой задачи, так что имеет смысл изучить/вспомнить TCP/IP)
Re: Пинг скрытых машин
Добавлено: 2013-03-11 22:17:12
rayder
а может таки попробуете arping? он именно так и работает, ну и на выходе соб-но покажет и ip и текущий мак. а дальше уже дело техники.
ну и ест-но почитать и вникнуть в работу протоколов.
Re: Пинг скрытых машин
Добавлено: 2013-03-11 22:21:09
GhOsT_MZ
Код: Выделить всё
#!/bin/sh
OUT="/tmp/ping.txt"
NET=`echo $1 | sed -r 's/^([0-9]{1,3})(\.{1,10})([0-9]{1,3})(\.{1,10})([0-9]{1,3})(\.{1,10})([0-9]{1,3})(-)([0-9]{1,3})/\1.\3.\5./'`;
START=`echo $1 | sed -r 's/^(.*\.)([0-9]{1,3})(-)([0-9]{1,3})/\2/'`;
END=`echo $1 | sed -r 's/^(.*\.)([0-9]{1,3})(-)([0-9]{1,3})/\4/'`;
i=${START};
/bin/echo -n > "${OUT}";
while [ $i -le $END ];
do
echo "${NET}${i} processing..."
/bin/ping -W 1 -c 1 `echo ${NET}${i} | sed -r 's/^([0-9]{1,3})(\.{1,10})([0-9]{1,3})(\.{1,10})([0-9]{1,3})(\.{1,10})([0-9]{1,3})/\1.\3.\5.\7/'` > /dev/null;
/usr/sbin/arp | /bin/grep -e "^${NET}${i}[[:space:]]*ether*" | /usr/bin/awk '{print $1}' >> "${OUT}";
i=$(($i + 1));
done;
/bin/cat "${OUT}";
exit 0;
Вот unix-like вариант решения проблемы, без постороннего софта. Использование (просканирует 192.168.1.1-192.168.1.254, а потом выведет включенные хосты, и ему побоку на блокировку пинга, главное ARP):