Как узнать IP-адреса в сети с помощью сценария bash?

Возможно ли определить IP-адреса систем внутри сети с использованием сценария bash? И как?

1
задан 22 July 2013 в 03:51

2 ответа

Этот ответ использует команду 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.

6
ответ дан 24 May 2018 в 20:56

Очевидно, что это плохая идея, но я попробовал

#!/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
0
ответ дан 24 May 2018 в 20:56

Другие вопросы по тегам:

Похожие вопросы: