Вступление
Открытые беспроводные сети сейчас есть практически везде, достаточно зайти в кафе, крупный магазин или поехать на общественном транспорте – везде вам предложат подключиться к открытой беспроводной сети ***_Free или аналогичной. Думаю, было бы интересно узнать о тех, кто подключен к этим сетям, какие они используют устройства, какие у них операционные системы, ПО и прочее. Можно конечно воспользоваться мобильным телефоном и специальным софтом, типа Nethunter или аналогичным, но установка Nethunter не является тривиальной задачей и не на все устройства его можно установить. В своей статье я предлагаю собрать устройство на базе микрокомпьютера Raspberry Pi Zero W, которое будет в автоматическом режиме обнаруживать открытые беспроводные сети, подключаться к ним и сканировать эти подсети с помощью Nmap. В принципе, можно делать что-то большее, но так как моя статья носит чисто образовательный характер, все прочие активности я оставлю за рамками. Как говорил Остап Бендер «Кодекс мы должны чтить!”…
Итак, зачем может потребоваться сканировать эфир на предмет открытых беспроводных сетей? При проведении тестирований на проникновение одним из векторов атак является эксплуатация уязвимостей в реализации каналов связи. Иными словами, нарушитель может просто подключиться к Ethernet розетке и попытаться проникнуть в сеть. В случае с Wi-Fi нарушитель может попытаться обнаружить открытые беспроводные сети (например, гостевые или поднятые пользователями на своих личных устройствах) и через них получить доступ к корпоративным ресурсам. Еще лучше, если можно не только обнаружить открытые сети, но и посмотреть кто к ним подключен, какие на этих узлах установлены ОС, какие порты открыты, какие версии ПО используются. И уж совсем хорошо получить готовый отчет в автоматическом режиме.
Также такие устройства могут использовать специалисты по информационной безопасности при аудите беспроводных сетей. Например, интересно, какие беспроводные сети “светятся” на территории предприятия. Добивает ли сигнал за пределы охраняемой территории? Есть ли среди них открытые? Не лишней будет также информация о том, кто пользуется этими сетями.
Думаю, мне удалось заинтересовать читателя, так что теперь можно смело приступать к реализации практической части.
Что нам потребуется
Учитывая, что мы хотим мониторить беспроводные сети, наше устройство должно быть портативным. Удобно просто включить устройство и не спешно прогуливаться по (или за) территорией, не привлекая лишнего внимания. Замечу, что описываемый далее функционал в принципе можно реализовать и с помощью мобильного телефона и Nethunter или аналогичных инструментов. Однако в случае с Nethuter есть ряд ограничений, связанных с моделью телефона, которых не будет при использовании Raspberry Pi.
Так как мы хотим собрать полноценное портативное устройство, нам потребуются аппаратные компоненты. Прежде всего, это сам микрокомпьютер Raspberry Pi Zero W, microSD карта от 8 Гб, аккумулятор (я использовал 800 мА/ч, но чем больше, тем лучше), кабель USB-microUSB, выключатель, корпус, опционально дисплей, прямые руки 8).
Навыки пайки крайне желательны, но если читатель на дух не переносит запах припоя J, то устройство можно собрать из готовых компонентов, хотя в таком случае оно будет более габаритным.
Для реализации полноценного устройства, описанного далее в статье нам потребуются следующие компоненты:
Также не лишним будет подобрать корпус для устройства. Точные размеры корпуса будут определяться форм-фактором аккумулятора и наличием дисплея.
Собираем аппаратную часть и готовим ОС
В отличии от своего старшего брата Raspberry Pi 3/4 версия Zero не имеет видеовыхода и это немного осложнит нам жизнь, хотя установка будет аналогична “старшим” версиям. Сначала необходимо скачать последнюю версию ОС Raspbian по ссылке.
Затем нужно записать полученный образ в micro-SD карту. Для этого можно воспользоваться утилитой Image Writer.
В Интернете есть множество статей с описанием процесса записи образа ОС на micro SD карту, поэтому мы не будем подробно расписывать все шаги.
После записи ОС подключаем карту в Raspberry Pi, также подключаем его с помощью переходников к LAN, подаем питание (micro USB порт PWR), загружаемся.
Далее нам необходимо выяснить, какой IP адрес получил микрокомпьютер. Проще всего посмотреть на своем маршрутизаторе, какой IP адрес был выдан устройству с именем raspberrypi. Подключаемся к этому адресу по SSH.
Реквизиты по-умолчанию pi/raspberry
Несколько слов о питании. Будет не очень хорошо, если в процессе настройки микрокомпьютер неожиданно отключится, поэтому при настройке лучше использовать обычный блок питания с micro USB выходом, а аккумулятор подключать, когда все будет настроено.
Для подключения дисплея необходимо сначала припаять к Raspberry контакты на оба ряда контактов. Получится следующее:
Далее просто подключаем дисплей к этим контактам.
Пишем скрипты
Теперь поговорим о программной начинке устройства. Нам необходимо выполнить следующие действия:
Она вернет список доступных сетей. Ниже приведены примеры фрагментов для открытой сети и защищенной WPA2:
Нам нужны ESSID только открытых сетей, поэтому делаем выборку по слову ESSID и значению Encryption key: off.
Теперь, для подключения к найденной сети нам необходимо сформировать содержимое файла /etc/network/interfaces и рестартовать сервис networking.
Для подключения к отрытой сети файл interfaces должен иметь следующую структуру:
Создать такой файл можно с помощью следующего кода:
Рестартуем сервис для того, чтобы получить IP адрес:
Полученный адрес нам необходимо передать nmap. Для того, чтобы это сделать необходимо распарсить вывод ifconfig для того, чтобы сформировать подсеть, которую мы будем сканировать (в примере это всегда /24 подсеть) и маску подсети. Возможно, предложенный алгоритм подсчета маски не является оптимальным, поэтому читателю предлагается в комментах указать более оптимальный способ вычисления маски.
UPD:
В качестве альтернативного варианта подсчета маски предлагается следующий:
В итоге в массиве array0 мы имеем подсеть для сканирования, а в переменной netw значение маски, которое можем передать nmap.
В качестве примера будем определять версии установленного на узлах ПО с помощью ключа –sV.
Подключаем дисплей
В целях минимизации расхода заряда я использовал относительно дорогой экран Adafruit Eink. Технология электронных чернил позволяет существенно снизить расход заряда, так как он расходуется только на отрисовку изменений на экране.
Для начала нам необходимо скачать библиотеку Broadcom BCM 2835 для работы с GPIO. Для этого выполним следующие команды:
Теперь нам доступны несколько примеров работы с экраном. Далее я внес правки в один из файлов примеров. Код ниже будет выводить в первой строке дисплея содержимое файла /home/pi/opendat (как мы увидим далее, это ESSID открытой сети, найденной устройством).
А в самой нижней строке у нас будет “тикать” таймер, отсчитывающий, сколько устройство проработало. Это нужно для того, чтобы мы понимали, что микрокомпьютер не завис и не сел.
Откомпилируем исходный код и запустим приложение:
Для того, чтобы дисплей работал непрерывно нам необходимо написать небольшой скрипт epd.sh, который каждые пять секунд будет наш откомпилированный файл epd, для обновления картинки на экране.
Чтобы скрипт начинал работать сразу, после запуска устройства пропишем его в файл /etc/rc.local.
Конечно, большая часть дисплея пока остается свободной, ноя предлагаю читателю самому потренироваться и вывести на экран интересующую информацию, например, полученный IP адрес, маску, подсеть, найденные узлы.
По факту наличие экрана заметно повышает эффективность использования устройства, так как сразу видно, что оно сейчас делает, какие сети сканирует и с каким результатом.
Результат
После подключения дисплея вернемся к bash-скрипту, о котором мы говорили ранее. Теперь нам необходимо в бесконечном цикле сканировать эфир, находить отрытые сети, подключаться к ним, получать IP и извлекать из вывода ifconfig необходимые, для работы nmap параметры.
Собрав все вместе, мы получаем следующий скрипт, осуществляющий сканирование в режиме бесконечного цикла.
Не забываем также добавить запуск скрипта в /etc/rc.local и перенаправить вывод в файл (мы же хотим сохранить полученные результаты). Вывод nmap можно конечно сохранять в отдельный файл средствами nmap, но мне интересен не только его отчет, но и информация о найденных сетях.
Собранное устройство имеет богатый потенциал для расширения. В приведенном примере оно лишь сканирует открытые подсети, однако при желании его функционал можно дополнить, например возможностями по аудиту паролей, анализу найденных веб сервисов, баз данных и т. д. Кроме того, при желании можно добавить Ethernet интерфейс и сканировать уже проводные сети в сценариях атак типа “Гость”, когда пентестеру предоставляется только сетевая розетка. Так что устройство можно развивать дальше.
В моем случае устройство выглядит вот так:
Ссылки
Открытые беспроводные сети сейчас есть практически везде, достаточно зайти в кафе, крупный магазин или поехать на общественном транспорте – везде вам предложат подключиться к открытой беспроводной сети ***_Free или аналогичной. Думаю, было бы интересно узнать о тех, кто подключен к этим сетям, какие они используют устройства, какие у них операционные системы, ПО и прочее. Можно конечно воспользоваться мобильным телефоном и специальным софтом, типа Nethunter или аналогичным, но установка Nethunter не является тривиальной задачей и не на все устройства его можно установить. В своей статье я предлагаю собрать устройство на базе микрокомпьютера Raspberry Pi Zero W, которое будет в автоматическом режиме обнаруживать открытые беспроводные сети, подключаться к ним и сканировать эти подсети с помощью Nmap. В принципе, можно делать что-то большее, но так как моя статья носит чисто образовательный характер, все прочие активности я оставлю за рамками. Как говорил Остап Бендер «Кодекс мы должны чтить!”…
Итак, зачем может потребоваться сканировать эфир на предмет открытых беспроводных сетей? При проведении тестирований на проникновение одним из векторов атак является эксплуатация уязвимостей в реализации каналов связи. Иными словами, нарушитель может просто подключиться к Ethernet розетке и попытаться проникнуть в сеть. В случае с Wi-Fi нарушитель может попытаться обнаружить открытые беспроводные сети (например, гостевые или поднятые пользователями на своих личных устройствах) и через них получить доступ к корпоративным ресурсам. Еще лучше, если можно не только обнаружить открытые сети, но и посмотреть кто к ним подключен, какие на этих узлах установлены ОС, какие порты открыты, какие версии ПО используются. И уж совсем хорошо получить готовый отчет в автоматическом режиме.
Также такие устройства могут использовать специалисты по информационной безопасности при аудите беспроводных сетей. Например, интересно, какие беспроводные сети “светятся” на территории предприятия. Добивает ли сигнал за пределы охраняемой территории? Есть ли среди них открытые? Не лишней будет также информация о том, кто пользуется этими сетями.
Думаю, мне удалось заинтересовать читателя, так что теперь можно смело приступать к реализации практической части.
Что нам потребуется
Учитывая, что мы хотим мониторить беспроводные сети, наше устройство должно быть портативным. Удобно просто включить устройство и не спешно прогуливаться по (или за) территорией, не привлекая лишнего внимания. Замечу, что описываемый далее функционал в принципе можно реализовать и с помощью мобильного телефона и Nethunter или аналогичных инструментов. Однако в случае с Nethuter есть ряд ограничений, связанных с моделью телефона, которых не будет при использовании Raspberry Pi.
Так как мы хотим собрать полноценное портативное устройство, нам потребуются аппаратные компоненты. Прежде всего, это сам микрокомпьютер Raspberry Pi Zero W, microSD карта от 8 Гб, аккумулятор (я использовал 800 мА/ч, но чем больше, тем лучше), кабель USB-microUSB, выключатель, корпус, опционально дисплей, прямые руки 8).
Навыки пайки крайне желательны, но если читатель на дух не переносит запах припоя J, то устройство можно собрать из готовых компонентов, хотя в таком случае оно будет более габаритным.
Для реализации полноценного устройства, описанного далее в статье нам потребуются следующие компоненты:
Наименование | Описание | Стоимость | Примечание |
Микрокомпьютер Raspberry Pi Zero W |
Ссылка скрыта от гостей
| 2000 р. | |
Аккумулятор |
Ссылка скрыта от гостей
| $18-20 | Лучше форм-фактор для RPi Zero W. |
Micro SD от 8 Гб | Купить можно где угодно | 250 р. | |
Переходники micro USB to USB, USB to LAN | 300 р. | ||
2.13" E-Ink дисплей для Raspberry Pi Zero |
Ссылка скрыта от гостей
| 2000 р. | Опционально |
Штыревой соединитель PLS-40 | 50 р. |
Также не лишним будет подобрать корпус для устройства. Точные размеры корпуса будут определяться форм-фактором аккумулятора и наличием дисплея.
Собираем аппаратную часть и готовим ОС
В отличии от своего старшего брата Raspberry Pi 3/4 версия Zero не имеет видеовыхода и это немного осложнит нам жизнь, хотя установка будет аналогична “старшим” версиям. Сначала необходимо скачать последнюю версию ОС Raspbian по ссылке.
Ссылка скрыта от гостей
Затем нужно записать полученный образ в micro-SD карту. Для этого можно воспользоваться утилитой Image Writer.
В Интернете есть множество статей с описанием процесса записи образа ОС на micro SD карту, поэтому мы не будем подробно расписывать все шаги.
После записи ОС подключаем карту в Raspberry Pi, также подключаем его с помощью переходников к LAN, подаем питание (micro USB порт PWR), загружаемся.
Далее нам необходимо выяснить, какой IP адрес получил микрокомпьютер. Проще всего посмотреть на своем маршрутизаторе, какой IP адрес был выдан устройству с именем raspberrypi. Подключаемся к этому адресу по SSH.
Реквизиты по-умолчанию pi/raspberry
Код:
sudo apt-get upgrade
sudo apt-get update
Для подключения дисплея необходимо сначала припаять к Raspberry контакты на оба ряда контактов. Получится следующее:
Пишем скрипты
Теперь поговорим о программной начинке устройства. Нам необходимо выполнить следующие действия:
- Просканировать эфир;
- Найти открытые сети;
- Подключиться к каждой из них последовательно;
- Получить IP адрес;
- Распарсить вывод команды ifconfig для получения значения адреса и маски для последующей передачи nmap;
- Запустить nmap и сохранить результаты сканирования в файл.
Код:
iwlist wlan0 scan | grep ESSID
Bash:
root@raspberrypi:~# iwlist wlan0 scan
wlan0 Scan completed :
Cell 01 - Address: 00:**:**:**:**:43
Channel:11
Frequency:2.462 GHz (Channel 11)
Quality=70/70 Signal level=-27 dBm
Encryption key: off
ESSID:"M******"
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
9 Mb/s; 12 Mb/s; 18 Mb/s
Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
Mode:Master
Extra:tsf=0000000000000000
Extra: Last beacon: 80ms ago
Cell 05 - Address: D4:**:**:**:**:FE
Channel:6
Frequency:2.437 GHz (Channel 6)
Quality=51/70 Signal level=-59 dBm
Encryption key: on
ESSID:"Z****"
IE: IEEE 802.11i/WPA2 Version 1
Group Cipher : CCMP
Pairwise Ciphers (1) : CCMP
Authentication Suites (1) : PSK
Код:
iwlist wlan0 scan | grep -e ESSID -e "Encryption key: off"
Для подключения к отрытой сети файл interfaces должен иметь следующую структуру:
Bash:
auto lo
iface lo inet loopback
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wireless-essid название_сети
Bash:
if [ "$line" == "Encryption key: off" ]
then
read line
echo "Open" $line > /home/pi/opendat
echo $line | cut -c 8- | sed 's/.$//'
echo "auto lo" > /etc/network/interfaces
echo "iface lo inet loopback" >> /etc/network/interfaces
echo " " >> /etc/network/interfaces
echo " " >> /etc/network/interfaces
echo "auto wlan0" >> /etc/network/interfaces
echo "allow-hotplug wlan0" >> /etc/network/interfaces
echo "iface wlan0 inet dhcp" >> /etc/network/interfaces
echo $line | cut -c 8- | sed 's/.$//' | while read line1
do
echo "wireless-essid" $line1 >> /etc/network/interfaces
done
echo " "
Bash:
service networking restart
ifconfig wlan0
UPD:
В качестве альтернативного варианта подсчета маски предлагается следующий:
Код:
nmap --iflist | grep -A 1 DST | tail -1 | cut -d " " -f 1
Bash:
ifconfig wlan0 | grep -e netmask | while read line2
do
IFS=' ' read -r -a array <<< "$line2"
netw="/24"
echo "${array[1]}"
echo "${array[3]}"
if [ "${array[3]}" == "255.255.255.0" ]
then
echo "/24"
IFS='.' read -r -a array0 <<< "${array[1]}"
echo "$netw"
fi
if [ "${array[3]}" == "255.255.0.0" ]
then
echo "/16"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/16"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/16
fi
if [ "${array[3]}" == "255.255.128.0" ]
then
echo "/17"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/17"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/17
fi
if [ "${array[3]}" == "255.255.192.0" ]
then
echo "/18"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/18"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/18
fi
if [ "${array[3]}" == "255.255.224.0" ]
then
echo "/19"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/19"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/19
fi
if [ "${array[3]}" == "255.255.240.0" ]
then
echo "/20"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/20"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/20
fi
if [ "${array[3]}" == "255.255.248.0" ]
then
echo "/21"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/21"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/21
fi
if [ "${array[3]}" == "255.255.252.0" ]
then
echo "/22"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/22"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/22
fi
if [ "${array[3]}" == "255.255.254.0" ]
then
echo "/23"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/23"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/23
fi
done
Код:
nmap -sV "${array0[0]}"."${array0[1]}"."${array0[2]}"."0""$netw"
Подключаем дисплей
В целях минимизации расхода заряда я использовал относительно дорогой экран Adafruit Eink. Технология электронных чернил позволяет существенно снизить расход заряда, так как он расходуется только на отрисовку изменений на экране.
Для начала нам необходимо скачать библиотеку Broadcom BCM 2835 для работы с GPIO. Для этого выполним следующие команды:
Bash:
wget http://www.open.com.au/mikem/bcm2835/bcm2835-1.5.tar.gz
; или, если не открывается
wget http://67.192.60.197/mikem/bcm2835/bcm2835-1.5.tar.gz
tar xvfz bcm2835-1.5.tar.gz;
cd bcm2835-1.5;
./configure;
make;
sudo make install
А в самой нижней строке у нас будет “тикать” таймер, отсчитывающий, сколько устройство проработало. Это нужно для того, чтобы мы понимали, что микрокомпьютер не завис и не сел.
C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <string>
#include <fstream>
#include <cstring>
#include <cstdio>
#include "epd2in13.h"
#include "epdpaint.h"
#include "imagedata.h"
#define COLORED 0
#define UNCOLORED 1
int main(void)
{
time_t now;
struct tm* timenow;
Epd epd;
if (epd.Init(lut_full_update) != 0) {
printf("e-Paper init failed\n");
return -1;
}
unsigned char* frame_buffer = (unsigned char*)malloc(epd.width / 8 * epd.height);
Paint paint(frame_buffer, epd.width, epd.height);
paint.Clear(UNCOLORED);
epd.DelayMs(2000);
if (epd.Init(lut_partial_update) != 0) {
printf("e-Paper init failed\n");
return -1;
}
char time_string[] = {'0', '0', ':', '0', '0', '\0'};
int i=1;
while (i<100) {
time(&now);
timenow = localtime(&now);
time_string[0] = timenow->tm_min / 10 + '0';
time_string[1] = timenow->tm_min % 10 + '0';
time_string[3] = timenow->tm_sec / 10 + '0';
time_string[4] = timenow->tm_sec % 10 + '0';
i++;
paint.Clear(UNCOLORED);
paint.SetWidth(118);
paint.SetHeight(255);
paint.SetRotate(ROTATE_90);
epd.DelayMs(500);
/* считываем содержимое файла /home/pi/opendat
Для последующего вывода на экран
*/
char str[1024];
FILE *in = fopen("/home/pi/opendat","r");
if(in==NULL)
{
std::cout << "Error opendat" << std::endl;
}
else
{
fgets(str,64,in);
fcloseall();
}
/*
Выводим на экран первой строкой
*/
paint.DrawStringAt(1, 0,str, &Font16, COLORED);
/*
А на последней строке у нас будет работать таймер, для того, чтобы мы понимали, что устройство работает, а не село или зависло
*/
paint.DrawStringAt(1, 108,time_string, &Font12, COLORED);
epd.DisplayFrame();
epd.SetFrameMemory(paint.GetImage(), 1, 1, paint.GetWidth(), paint.GetHeight());
epd.DelayMs(1500);
}
return 0;
}
Код:
make
sudo ./epd
Bash:
#!/bin/bash
while true
do
/home/pi/raspberrypi/bcm2835/./epd
sleep 5
done
Чтобы скрипт начинал работать сразу, после запуска устройства пропишем его в файл /etc/rc.local.
Код:
/home/pi/./epd.sh &
По факту наличие экрана заметно повышает эффективность использования устройства, так как сразу видно, что оно сейчас делает, какие сети сканирует и с каким результатом.
Результат
После подключения дисплея вернемся к bash-скрипту, о котором мы говорили ранее. Теперь нам необходимо в бесконечном цикле сканировать эфир, находить отрытые сети, подключаться к ним, получать IP и извлекать из вывода ifconfig необходимые, для работы nmap параметры.
Собрав все вместе, мы получаем следующий скрипт, осуществляющий сканирование в режиме бесконечного цикла.
Bash:
#!/bin/bash
while true
do
echo "Scanned at " $(date)
iwlist wlan0 scan | grep -e ESSID -e "Encryption key: off" | while read line
do
if [ "$line" == "Encryption key: off" ]
then
read line
echo "Open" $line > /home/pi/opendat
echo $line | cut -c 8- | sed 's/.$//'
echo "auto lo" > /etc/network/interfaces
echo "iface lo inet loopback" >> /etc/network/interfaces
echo " " >> /etc/network/interfaces
echo " " >> /etc/network/interfaces
echo "auto wlan0" >> /etc/network/interfaces
echo "allow-hotplug wlan0" >> /etc/network/interfaces
echo "iface wlan0 inet dhcp" >> /etc/network/interfaces
echo $line | cut -c 8- | sed 's/.$//' | while read line1
do
echo "wireless-essid" $line1 >> /etc/network/interfaces
done
echo " "
service networking restart
ifconfig wlan0
ifconfig wlan0 | grep -e netmask | while read line2
do
IFS=' ' read -r -a array <<< "$line2"
netw="/24"
echo "${array[1]}"
echo "${array[3]}"
if [ "${array[3]}" == "255.255.255.0" ]
then
echo "/24"
IFS='.' read -r -a array0 <<< "${array[1]}"
echo "$netw"
fi
if [ "${array[3]}" == "255.255.0.0" ]
then
echo "/16"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/16"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/16
fi
if [ "${array[3]}" == "255.255.128.0" ]
then
echo "/17"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/17"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/17
fi
if [ "${array[3]}" == "255.255.192.0" ]
then
echo "/18"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/18"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/18
fi
if [ "${array[3]}" == "255.255.224.0" ]
then
echo "/19"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/19"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/19
fi
if [ "${array[3]}" == "255.255.240.0" ]
then
echo "/20"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/20"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/20
fi
if [ "${array[3]}" == "255.255.248.0" ]
then
echo "/21"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/21"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/21
fi
if [ "${array[3]}" == "255.255.252.0" ]
then
echo "/22"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/22"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/22
fi
if [ "${array[3]}" == "255.255.254.0" ]
then
echo "/23"
IFS='.' read -r -a array0 <<< "${array[1]}"
netw="/23"
echo "${array0[0]}"."${array0[1]}"."${array0[2]}".0/23
fi
nmap -O "${array0[0]}"."${array0[1]}"."${array0[2]}"."0""$netw"
done
fi
done
sleep 5
done
Код:
/home/pi/scan1.sh >> /home/pi/scan1.txt &
В моем случае устройство выглядит вот так:
Ссылки
-
Ссылка скрыта от гостей- примеры работы с BCM 2835.
-
Ссылка скрыта от гостей- русскоязычный man по Nmap.
- Бирюков А. А, “Собираем устройства для тестов на проникновение”, ДМК Пресс, 2018