Возможно ли определить IP-адреса систем внутри сети с использованием сценария bash? И как?
Этот ответ использует команду nmap для сбора информации о активных хостах в сети.
Nmap («Network Mapper») - это инструмент с открытым исходным кодом для проверки сети и проверки безопасности. Он был разработан для быстрого сканирования больших сетей, хотя он отлично работает с одиночными хостами. Nmap использует необработанные IP-пакеты в новых способах определения того, какие хосты доступны в сети, какие службы (имя и версия приложения) эти хосты предлагают, какие операционные системы (и версии ОС) они запускают, какие типы фильтров пакетов / брандмауэры используются, и десятки других характеристик.Предполагая, что вам нужно сканировать диапазон 192.168.0.X, вы можете попробовать:
nmap -v -sP 192.168.0.0/24
Где 192.168.0.0 - сетевой адрес, а /24 - сетевая маска эквивалентно 255.255.255.0. Таким образом, указанная команда будет сканировать 256 хостов.
Чтобы собрать активные IP-адреса, можно использовать следующую строку:
IPS_UP=$(nmap -nsP 192.168.0.0/24 2>/dev/null -oG - | grep "Up$" | awk '{printf "%s ", $2}')
Фактически она объединяет список активных IP-адресов ( фильтруется grep) в переменную с именем IPS_UP:
nmap запускается с переключателями -n (без разрешения имен), -sP (сканирование ping) и -oG для вывода обработанный grep выход на стандартный вывод (-). grep фильтрует только строки, содержащие слово «Вверх» в конце строки («$»). awk печатает второй столбец в списке, выводимом по nmap, который является IP-адресом, и добавляет пробел. Подстановка команды $() позволяет назначить цепочку команд для переменной IPS_UP.Network Mapper может быть установлен с помощью sudo apt-get install nmap.
Примечание. nmap может обнаружить больше хостов, если их запускает привилегированный пользователь. Это связано с тем, что для сканирования хоста отправляются различные типы пакетов. Изменив указанную выше строку на чтение sudo nmap ..., вы можете запустить команду nmap как root.
Очевидно, что это плохая идея, но я попробовал
#!/bin/bash
IP=$(ifconfig eth0 | grep Mask | cut -d ':' -f2 | cut -d " " -f1)
Mask=$(ifconfig eth0 | grep Mask | cut -d ':' -f4 | cut -d " " -f1)
IFS=.
IPArray=($IP)
MaskArray=($Mask)
NetArray=()
Start=0
Max=$(( 255 * 255 * 255 * 255 ))
for key in "${!IPArray[@]}";
do
NetArray[$key]=$(( ${IPArray[$key]} & ${MaskArray[$key]} ))
Start=$(( $Start + (${NetArray[$key]} << (3-$key)*8) ))
done
IFS=
echo "Your IP Address : $IP"
echo "Your N/W Mask : $Mask"
echo "Your N/W Address : ${NetArray[@]}"
echo "IPs to be Checked : $(( $Max - $Start ))"
for ((IPs=$Start; IPs <= $Max; IPs++))
do
IP=$(( IPs >> 24 ))
IP="$IP.$(( (IPs >> 16) & 255 ))"
IP="$IP.$(( (IPs >> 8) & 255 ))"
IP="$IP.$(( IPs & 255 ))"
$(ping -c 1 -w 1 $IP >& /dev/null)
if [[ $? -eq 0 ]]; then
echo "$IP exists in Network. Just $(( $Max - $IPs )) more to go."
fi
done