Можно ли определить IP-адреса систем в сети, используя скрипт bash? И как?
Установите 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}')
Очевидно, что это плохая идея, но я попробовал
#!/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
Этот ответ использует 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
управляйте как корень.