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

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

6
задан 22 July 2013 в 02:51

3 ответа

Установите arp-scan (sudo apt-get install arp-scan) и добавьте следующую строку в скрипт:

IPs=$(sudo arp-scan --localnet --numeric --quiet --ignoredups | grep -E '([a-f0-9]{2}:){5}[a-f0-9]{2}' | awk '{print $1}')

Теперь у вас есть все активные IP-адреса в переменной IPs.

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

PS: Если вы установите gawk, команда может быть сокращена до (благодаря belacqua ):

IPs=$(sudo arp-scan --localnet --quiet --ignoredups | gawk '/([a-f0-9]{2}:){5}[a-f0-9]{2}/ {print $1}')
0
ответ дан 22 July 2013 в 02:51

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

#!/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
ответ дан 22 July 2013 в 02:51

Этот ответ использует nmap команда для сбора информации активных хостов в сети.

Nmap ("Сетевой Картопостроитель") является инструментом с открытым исходным кодом для сетевого исследования и аудита безопасности. Это было разработано для быстрого сканирования больших сетей, хотя это хорошо работает против единственных хостов. 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 processable вывод на стандартный вывод (-).
  • grep фильтры только строки, содержащие слово "Up" в конце строки (" $ ").
  • awk печатает второй столбец в списке, произведенном nmap, который является IP-адресом и добавляет пространство.
  • $() замена команды позволяет выводу цепочки команд быть присвоенным IPS_UP переменная.

Сетевой Картопостроитель может быть установлен при помощи sudo apt-get install nmap.

Примечание:
nmap мог бы обнаружить больше хостов, если выполнено привилегированным пользователем. Это вызвано тем, что другой вид пакетов отправляется для сканирования хоста. Путем изменения вышеупомянутой строки для чтения sudo nmap ... позволяет работать nmap управляйте как корень.

7
ответ дан 22 July 2013 в 02:51

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

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