Скрипт для мониторинга сети: порты, URL, системное время и пинг со звуковым оповещением
Как-то возникла потребность отслеживать доступность в сети нескольких важных устройств и отвлекать оператора от кроссвордов негромким, но навязчивым писком. Желательно без установки стороннего софта.
Закрыть этот вопрос помог почти забытый встроенный в Windows скриптовый язык hta. Получилось весьма изящно: полноценный инструмент без установки, без зависимостей, без Zabbix. В одном файле уместился и код, и нехитрый пользовательский интерфейс, и кастомный звуковой сигнал. Скрипт умеет проверять:
- доступность хостов по ICMP,
- состояние TCP-портов (доступность баз данных, веб-серверов, почты),
- HTTP-статус сайтов и сервисов (веб-интерфейсы камер, API-эндпоинты),
- расхождение системного времени.
Когда что-то идёт не так - пищит через колонки. Бип!
Запуск
Скрипт запускается как обычное приложение, двойным кликом.
Существует две версии скрипта: в первой звук уведомления идёт отдельным wav-файлом, а вторая - самодостаточная, являющаяся одновременно и скриптом, и валидным .wav в одном лице по принципу rarjpeg.

Настройка
Чтобы задать свой список адресов, откройте файл в Notepad++ или в другом текстовом редакторе (кодировка UTF-8). В начале есть блок <script> — он единственный, где нужно что-то менять.

Каждая строка в списке hosts - это один объект для проверки. Может включать следующие поля:
-
name- отображаемое имя, необязательный параметр.. -
ping- включает проверку доступности по ICMP. Можно вписать IP адрес или доменное имя. -
port- скрипт будет пытаться подключиться к указанному TCP-порту. Сервис считается недоступным, если соединение сброшено или время вышло. Задаётся в форматеадрес:порт. Несколько портов в одной строке указать нельзя, вместо этого продублируйте хост нужное число раз. -
url- делает HTTP-запрос и проверяет код ответа, он должен быть в диапазоне 2xx. Задаётся в форматеhttp(s)://адрес(:порт). -
time- получает время сервера из HTTP-заголовкаDateи сравнивает с локальными часами. Если разница превышает установленный порог - тревога. Задаётся в форматеhttp(s)://адрес(:порт). Помимо серверов, можно также получать время с рабочих станций Windows через открытый по умолчанию порт5357.
Как видно в последнем примере, один и тот же хост можно проверять сразу несколькими способами.
Расписание проверки и таймаут - общие для всех хостов, задаются в миллисекундах через checkInterval и checkTimeout. Допустимое расхождение времени - timeThreshold. Флаг urlFollowRedirects разрешает или запрещает следование редиректам - полезно, если вы следите за конкретным эндпоинтом и не хотите, чтобы он молча куда-то переехал.
Системные требования
Скрипт работает одинаково хорошо на всей линейке Windows от XP до 11-й, ничего дополнительно устанавливать не нужно. HTA крутится на движке IE, который Microsoft сохранили даже в эпоху Edge.

В системе должно быть разрешено исполнение ActiveX для локальных страниц (по умолчанию разрешено). Это галочки в окне настроек internet Explorer, в разделе, связанном с безопасностью и политиками.
Проект на GitHub: https://github.com/u07/pinger