Скрипт для мониторинга сети: порты, 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