# Сканируем сети с помощью скриптов Bash

### Сканируем подсети <a href="#skaniruem-podseti" id="skaniruem-podseti"></a>

Здесь bash-скрипт просканирует сеть на предмет хостов, подключенных по IP-адресам 10.1.1.1 – 255.

Скрипт выведет сообщение Хост с IP → IP-адрес поднят, если команда ping была успешной.

На всякий случай: мы можем менять скрипт для сканирования диапазона хостов. Вот сам скрипт:

```
#!/bin/bash

is_alive_ping()
{
  ping -c 1 $1 > /dev/null
  [ $? -eq 0 ] && echo Хост с IP: $i поднят.
}

for i in 10.1.1.{1..255} 
do
is_alive_ping $i & disown
done
```

Выполнение скрипта:

```
./bash_ping_scan.sh
```

### Настраиваем уведомление по почте, когда сервер не работает  <a href="#nastraivaem-uvedomlenie-po-pochte-kogda-server-ne-rabotaet" id="nastraivaem-uvedomlenie-po-pochte-kogda-server-ne-rabotaet"></a>

Системный администратор может регулярно выполнять этот скрипт с использованием планировщика cron. Как это работает:

1. Скрипт использует команду ping для проверки связи с хостом или IP-адресом, указанным в качестве аргумента.
2. В случае, если место назначения недоступно → в ход вступает команда mail для уведомления системного администратора об этом событии.

Сам скрипт:

```
#!/bin/bash

for i in $@
do
ping -c 1 $i &> /dev/null

if [ $? -ne 0 ]; then
 echo "`date`: ping не прошел, $i хост лежит !" | mail -s "$i хост лежит!" admin@itsecforu.ru
fi
done
```

Выполнение скрипта:

```
./check_hosts.sh google.com yahoo.com 192.168.1.2 mylinuxbox N2100
```

### Создаем логи мониторинга <a href="#sozdaem-logi-monitoringa" id="sozdaem-logi-monitoringa"></a>

Это улучшенная версия предыдущего примера. Подходит для сценария, когда в системе не настроена почта. Скрипт здесь сам создаст файл логов.

Ядро скрипта заключено в бесконечный цикл while, который настроен на выполнение проверки ping каждый час. Если собираетесь использовать скрипт с планировщиком cron → удалите бесконечный цикл while.

Сам скрипт:

```
#!/bin/bash 
 
LOG=/tmp/mylog.log 
SECONDS=3600 

EMAIL=admin@itsecforu.ru
 
for i in $@; do 
 echo "$i-UP!" > $LOG.$i 

done 
 
while true; do 
 for i in $@; do 

ping -c 1 $i > /dev/null 
if [ $? -ne 0 ]; then 
 STATUS=$(cat $LOG.$i) 
   if [ $STATUS != "$i-DOWN!" ]; then 
    echo "`date`: ping неудачен, $i хост лежит!" | 
   mail -s "$i хост лежит!" $EMAIL 

   fi 
 echo "$i-DOWN!" > $LOG.$i 

else 
 STATUS=$(cat $LOG.$i)
   if [ $STATUS != "$i-UP!" ]; then 
    echo "`date`: пинг прошел, $i Хост подня!" | 
   mail -s "$i Хост поднят !" $EMAIL

   fi 
 echo "$i-UP!" > $LOG.$i 
fi 
done 

sleep $SECONDS 
done
```

Выполнение скрипта:

```
./check-server-status.sh google.com yahoo.com 192.168.1.2 mylinuxbox N2100
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://notes.kraken-security.ru/kraken/krupicy-znanii/instrumenty/skaniruem-seti-s-pomoshyu-skriptov-bash.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
