Bash. Подборка старых скриптов от Ben-Ja. Скрипт определения имен хостов по заданому диапазону адресов.


Определение имен хостов по диапазону адресов

#!/bin/bash

####################################################################
# Скрипт определения имен хостов по заданому диапазону адресов #
# #
# Внимание! #
# Получать и использовать официальную информацию от DNS серверов #
# НЕ противозаконно. #
# (На то они и нужны, чтобы эту информацию предоставлять.) #
# Скрипт писался для сети nln.ru Ben-Ja©2004 #
# Распространяется абсолютно свободно. Т.е. даром. =) #
# Автор не несет какой либо ответственности за использование #
# и ущерб, нанесенный данным программным обеспечением. #
####################################################################

# Важно!!! Это модернизированый вариант, который не только берет имя по IP адресу,
# но еще и запускает arping. Для его работы у вас должен быть установлена утилита arping,
# входящая в пакет iputils и настроена система sudo (sudoers).
#

 

# Для вывода данных в файл достаточно перенаправить поток в файл
# Например: ./names.sh 192.168.140 > res.txt
# А чтобы при записи в файл еще и видеть что пишется, просто "tail -f res.txt" в сосетнем терминале =)

# Узнаем у DNS сервера имена всех хостов в данной подсети.
if [ -z "$1" ]; then
echo используйте: $0 192.168.140 т.е. Укажите нужную подсеть.
exit
fi
# Если сетка задана - действуем
clear
sta=1 # Начальный адрес [диапазон можно изменять]
sto=254 # Конечный адрес. (255 уже броадкаст.)
# $1 - введенная подсеть.
echo "############ Поехали! Сеть: $1 ############################"
# Начинаем перебор от 1 до 254
for i in `seq $sta $sto`;
do
# формируем IP'шник
zapr=$1.$i
printf "$zapr ***\t"
# Обращаемся к серверу и очищаем результат. (если не определен - не выводим ничего.)
# Здесь: host $zapr - сам запрос.
# gawk --re-interval '{ print$5 }' - разделяет полученную строку на кусочки
# по пробелам и выдергивает пятый кусочек.
# grep -v NXDOMAIN - выводит всё, кроме того, где встречается NXDOMAIN
# (Он встречается при ненахождении имени хоста
# пример: Host 2.147.168.192.in-addr.arpa not found: 3(NXDOMAIN))
# Раскомментируйте следующие строки для использования ARP запросов.
# host $zapr| gawk --re-interval '{ print$5 }' | grep -v NXDOMAIN && sudo arping -c1 $zapr 2> /dev/null |\
#grep ms | gawk --re-interval '{ print$5 }'
# printf "\n"
# Для использования без arping'а для определения МАС адреса работающих хостов
# (естественно, действует в одной подсети т.е. не дальше ближайшего шлюза.)
# закомментируйте строчки находящиеся выше и раскомментируйте нижеследующие строки.
host $zapr| gawk --re-interval '{ print$5 }' | grep -v NXDOMAIN
printf "\n"

 

sleep 0.7s # а теперь ждем, чтобы не сочли наши поиски атакой на DNS сервер =)
done
echo "############ Приехали... ############################################"
exit 0