Проверка доступности TCP порта в командной строке Windows.Задачу мониторинга состояния Интернет-ресурса можно условно разделить на 2 части: Мониторинг и оповещение должны выполняться автоматически, без вмешательства человека. Для примера, в качестве контролируемого сервиса возьмем почтовый сервер mail.ru, и его SMTP-порт 25/TCP. Решить задачу мониторинга портов стандартными средствами Windows невозможно, поскольку в современных дистрибутивах Windows нет утилит командной строки, обладающих требуемым функционалом. Придется использовать стороннее программное обеспечение. Опрос порта TCP утилитой PsPing из пакета PsTools комплекта Sysinternals Suite от Microsoft.Утилита PsPing.exe входит в состав пакета PsTools и предназначена для диагностики и оценки пропускной способности сетевого соединения. Скачать пакет можно из раздела Sysinternals сайта Microsoft Technet. Программы PsTools являются переносимыми и не нуждаются в установке – достаточно просто разархивировать загруженный архив и, желательно, поместить его содержимое в каталог, прописанный в путях поиска исполняемых программ, задаваемых переменной окружения PATH.Пакет PsTools можно скачать отдельным архивом или в составе набора программных инструментов для диагностики и администрирования системы Sysinternals Suite. Пользователи современных ОС Windows могут воспользоваться командой winget: winget install "Sysinternals Suite" Команда Winget выполнит загрузку актуальной версии пакета Sysinternals Suite из магазина приложений Windows и поместит его содержимое в каталоги приложений пользователя ( например, для пользователя User - в C:\Users\User\AppData\ Local\Microsoft\WindowsApps), путь к которому уже присутствует в переменной окружения PATH. Командная строка для Winget должна быть запущена от имени Администратора. Кроме того, в конце данной страницы размещены ссылки на скачивание архивов с отдельными программами, упоминаемыми в данной статье. Пример команды для опроса состояния порта: psping.exe -4 -n 1 smtp.mail.ru:25 Параметры командной строки: -4 - принудительно использовать протокол IPv4. -n 1 - количество сессий TCP. smtp.mail.ru:25 - имя сервера и номер порта для проверки подключения. Результат выполнения команды для доступного порта: Команда смены кодовой страницы chcp 1251 нужна для правильного отображения кириллицы при выполнении psping в среде русскоязычных ОС Windows. Признаком доступности порта можно считать наличие строки: Sent = 1, Received = 1, Lost = 0 (0% loss), Отправлен 1 пакет, получен 1 пакет, потеряно 0 пакетов (0% потерь) Если же подключиться к указанному порту невозможно, то выводится сообщение об ошибке: Признаком недоступности порта можно считать наличие строки: Sent = 1, Received = 1, Lost = 1 (100% loss), Отправлен 1 пакет, получен 1 пакет, потерян 1 пакет (100% потерь) Таким образом, для решения первой части задачи мониторинга портов можно использовать команду PsPing в цепочке с командой поиска find, формирующей значение переменной ERRORLEVEL в зависимости от результатов поиска. При наличии в результатах выполнения команды psping например, строки (0% loss , значение переменной ERRORLEVEL будет равно нулю, что говорит о том, что опрашиваемый порт открыт (opened) и подключение к нему выполнилось успешно. При ином значении ERRORLEVEL подключение не выполнилось, порт недоступен или закрыт (closed). psping -4 -n 1 smtp.mail.ru:25 | find "(0%% loss" if %ERRORLEVEL% == 0 goto opened :closed Подпрограмма обработки закрытого порта exit :opened Подпрограмма обработки открытого порта exit Необходимо отметить, что утилиту psping.exe можно использовать в ОС Windows Vista и более поздних. В среде Windows XP/2000 она не работает, и в качестве альтернативы можно воспользоваться сторонней утилитой tcping . Опрос порта TCP утилитой tcping.Утилита tcping также не требует установки в системе и для ее использования можно просто скачать исполняемый файл tcping.exe и поместить его в каталог, присутствующий в переменной окружения PATH, например, в тот же, что и в предыдущем случае - C:\Users\User\AppData\ Local\Microsoft\WindowsApps)Синтаксис командной строки tcping.exe и вывод результатов ее работы во многом схожи с рассмотренным выше способом опроса порта утилитой PsPing tcping.exe -n 1 smtp.mail.ru 25 - однократный опрос порта 25 сервера smtp.mail.ru Признаком доступности порта можно считать, например, наличие строки Port is open в результатах вывода команды tcping. Таким образом, командный файл с данной утилитой почти не будет отличаться от рассмотренного выше: tcping -4 -n 1 smtp.mail.ru 25 | find /I "Port is open" if %ERRORLEVEL% == 0 goto opened :closed Подпрограмма обработки закрытого порта exit :opened Подпрограмма обработки открытого порта exit В команде find используется необязательный ключ /i - не различать строчные и заглавные буквы в строке поиска. Утилита tcping.exe проверялась на работоспособность в операционных системах от Windows XP до Windows 11. Отправка электронной почты из командной строки CMD Windows.В качестве подпрограммы обработки закрытого порта можно использовать отправку электронного письма, сообщающего об отсутствии подключения к наблюдаемой службе. Когда-то популярная программа для отправки почты из командной строки blat.exe сегодня может не сработать, поскольку многие почтовые сервера требуют обязательное SSL/TLS-шифрование данных, которое упомянутой утилитой не поддерживается. Программа не обновлялась почти 10 лет ( с мая 2014 года), и на сегодняшний день является слишком устаревшей. Если же шифрование необязательно, можно воспользоваться и blat, как описано здесьОдной из простейших программ для отправки почты из командной строки является бесплатный mailer от Directory Wizards Inc.. Программа не требует установки в системе, достаточно просто скачать исполняемый файл и поместить его в каталог, например, в C:\Users\User\AppData \Local\Microsoft\WindowsApps) Скачиваемый файл, имя которого содержит версию и разрядность (например - mailer-v1.6-w64-x86_64.exe) можно переименовать в просто mailer.exe. Для получения справки по использованию программы введите команду: mailer --help Программа считывает сообщения из стандартного ввода (STDIN) и отправляет их в соответствии с параметрами командной строки: --host - имя узла отправителя, по умолчанию – localhost; --port TCP порт почтового сервера, по умолчанию – 25; --user - имя пользователя для подключения к почтовому серверу, через который выполняется отправка письма; --pass - пароль; --to - поле ”Кому”; --cc - поле ”Копия”; --bcc- поле ”Скрытая копия”; --from - поле ”От”, по умолчанию Пользователь@Компьютер; --subject - поле ”Тема”; --file - вложенный файл; --mime - тип MIME расширения файла; --ssl - SMTP SSL (порт по умолчанию - 465); --tls - расширение SMTP StartTLS (порт по умолчанию - 25); --mimeinfo - отобразить перечень типов MIME; --verbose - подробная информация об отправке для отладки; --msgid - отобразить идентификатор сообщения (Message ID) после отправки; Возможно использование переменных среды: MAILTO - если не заданы параметры to/cc/bcc; LOGNAME используется в поле From; Программа возвращает код ошибки если переменная MAILTO не задана и отсутствуют параметры командной строки --to,--cc,--bcc; Пример из справки по использованию mailer: type msg.txt | mailer --to "coyote@acme.com" --subject Update --file plans.pdf Содержимое файла msg.txt используется в качестве текста письма, отправляемого на адрес coyote@acme.com с темой Update и вложенным файлом plans.pdf. Остальные параметры используются по умолчанию. Пример практического применения утилиты при использовании в командном файле для мониторинга порта TCP: echo Port CLOSED - %DATE% - %time% | mailer --host mail.ab57.ru --port 25 –tls --user monitor@ab57.ru --pass PassMon --to "admin@ab57.ru" --from "monitor@ab57.ru" --subject "Service status in %TIME%" В качестве текста письма будет сообщение Port CLOSED - дата и - время отправки. Письмо будет отправлено использованием расширения StartTLS протокола SMTP на адрес admin@ab57.ru с темой Service status in время от monitor@ab57.ru через почтовый сервер mail.ab57.ru при подключении к которому использовалось имя пользователя monitor@ab57.ru и пароль PassMon На практике, прежде чем отправлять письмо о недоступности порта, имеет смысл выполнить несколько проверок, разделенных паузами в 20-30 секунд. Поскольку крупные почтовые сервисы (Gmail, Hotmail, Яндекс) предъявляют повышенные требования к настройкам безопасности и работе почтовых клиентов, возможно потребуются дополнительные настройки почты через веб-доступ. Если же программа mailer.exe не полностью соответствует требованиям почтового сервиса, можно воспользоваться так же бесплатной, но более сложной и функциональной SwithMail Таким образом, можно создать командный файл, выполняющий отслеживание состояния нужного порта и оповещающий пользователя электронным письмом в случае его изменения: @echo off chcp 1251 echo Start Monitoring %DATE% by %~n0 On computer %ComputerNAME% at %TIME% > "%~DP0monlog.txt" rem call :maillog :opros psping -4 -n 1 smtp.mail.ru:25 | find /i "(0%% loss" if %ERRORLEVEL% == 0 goto opros rem Errorlevel not 0 echo port monitoring error - %DATE% - %time% >>"%~DP0monlog.txt" rem call :maillog rem :Closed ping -n 30 localhost > nul psping -4 -n 1 smtp.mail.ru:25 | find /i "(0%% loss" if %ERRORLEVEL% == 0 ( echo port monitoring NOT error - %DATE% - %time% >>"%~DP0monlog.txt" call :maillog goto opros ) ping -n 30 localhost > nul psping -4 -n 1 smtp.mail.ru:25 | find /i "(0%% loss" if %ERRORLEVEL% == 0 ( echo port monitoring NOT error - %DATE% - %time% >>"%~DP0monlog.txt" call :maillog goto opros ) ping -n 30 localhost > nul psping -4 -n 1 smtp.mail.ru:25 | find /i "(0%% loss" if %ERRORLEVEL% == 0 ( echo port monitoring NOT error - %DATE% - %time% >>"%~DP0monlog.txt" rem call :maillog goto opros ) echo port monitoring ended - port closed - %DATE% - %time% >>"%~DP0monlog.txt" call :maillog :endbat chcp 866 exit :maillog type "%~DP0Monlog.txt" | mailer --host mail.ab57.ru --port 25 --tls --user mon@ab57.ru --pass Password --to "mon@ab57.ru" --from "mon@ab57.ru" --subject "PortMon - %TIME%" Данный командный файл ведет журнал своих действий %~DP0monlog.txt. Конструкция %~DP0 принимает значение Диск и путь командного файла. Т.е. журнал ведется в каталоге, из которого был запущен командный файл. В командном файле используются паузы, реализуемые пингом петлевого интерфейса: ping –n 30 localhost - задержка на 30 секунд. Отправка журнала электронной почтой выполняется подпрограммой :maillog. В момент запуска командный файл обнуляет журнал, записывает в него дату и время начала отслеживания состояния порта и отправляет его содержимое электронной почтой. Порт циклически опрашивается командой PsPing. При необходимости, интервал опроса можно уменьшить, добавив паузы пингом петлевого интерфейса. В случае возникновения ошибки доступа к порту, выполняется неоднократный опрос с паузами в 30 секунд, чтобы исключить кратковременные сбои . Если при этом доступность порта восстановится, циклический опрос будет продолжен, если же восстановление невозможно, то командный файл завершает свою работу. Пример информации журнала: Start Monitoring 07.12.2023 by Portmon1 On computer WIN11-2 at - 10:02:46,99 port monitoring error - 07.12.2023 - 11:52:46,99 port monitoring NOT error - 07.12.2023 - 11:54:41,65 port monitoring error - 07.12.2023 - 12:05:12,48 port monitoring ended - port closed - 07.12.2023 - 12:08:03,05 Мониторинг порта с использованием стандартного Планировщика WimdowsПланировщик задач Windows можно использовать для опроса порта с определенной периодичностью. Командный файл будет выполнять однократный опрос, а его запуск будет выполняться с определенной периодичностью. Задача должна выполняться скрытно, не мешая работе пользователя. Вместо отправки письма о недоступности порта, можно использовать отображение соответствующего сообщения текущему пользователю компьютера командой msg console. Пример командного файла: @echo off psping -4 -n 1 smtp.mail.ru:25 | find /i "(0%% loss" if %ERRORLEVEL% == 0 exit msg console Тестируемый порт недоступен! Проверяется порт, и если он открыт, то работа командного файла завершается командой exit, в противном случае – выполняется отображение сообщения об ошибке текущему пользователю компьютера. При необходимости, можно отправить сообщение пользователю другого компьютера, для чего в команде msg console используется ключ /SERVER:имя_компьютера: msg console /SERVER:OtherPC Тестируемый порт недоступен! Однако, для отправки сообщения пользователю другого компьютера требуются некоторые дополнительные настройки. Подробности. Создание и настройка задачи Планировщика.Запускаем Планировщик заданий (taskschd.msc), переходим в Библиотеку планировщика и с помощью меню правой кнопки мышки выбираем ”Создать простую задачу”: Будет запущено средство Мастер создания простой задачи. Задаем название задачи и, при необходимости – ее описание. Название лучше выбрать на латинице, что упростит управление задачей из командной строки утилитой schtasks.exe, если в этом возникнет необходимость. Далее нужно будет определить Триггер, или условия, при которых задача будет выполнена. Создаваемая задача должна быть выполнена Однократно с повторением через заданный интервал времени до бесконечности (или до определенного времени). Дата и время начала выполнения задачи особой роли не играет, поскольку задачу можно выполнить принудительно, на для порядка, пусть будет через 10 минут после создания задачи. Жмем кнопку ”Далее” и задаем параметр Действие - Запустить программу. В качестве программы будет использоваться командный файл для мониторинга: Аргументы командной строки для данного файла не используются, а рабочий каталог нужен в тех случаях, когда используются относительные пути (относительно каталога, в котором находится командный файл). Для работы приведенного в качестве примера командного файла эти параметры задавать не обязательно. На следующем шаге отображается суммарная информация о задаче и после нажатия на кнопку ”Готово”, задача Планировщика будет создана. Галочку Открыть окно ”Свойства” после нажатия кнопки ”Готово” ставить необязательно, поскольку данное окно можно открыть с помощью контекстного меню, вызываемого правой кнопкой мышки. В свойствах задачи на вкладке Триггер нужно настроить интервал и период выполнения задачи: Выбираем нужный интервал ( 5 минут) и бесконечный период повторения задачи. Тем самым мы определяем правило, по которому задача выполняется 1 раз и затем повторяется с интервалом 5 минут до бесконечности. Также нелишним будет сделать выполнение задачи для всех пользователей компьютера и сделать ее скрытной, чтобы не мешать их работе за компьютером. При сохранении измененных параметров, потребуется наличие прав Администратора. Если было запланировано выполнение задачи в прошедшем времени, то нужно принудительно выполнить ее через контекстное меню, вызываемое правой кнопкой мышки. Таким же образом можно выполнить и задачу, запланированную и на будущее, не дожидаясь срабатывания триггера, но повторение выполненной задачи начнется с момента времени, заданного в параметрах триггера. При необходимости, созданную задачу можно отключить или удалить ее, используя контекстное меню правой кнопки мышки. Архив с утилитами tcping.exe, psping.exe, mailer.exe. Пароль – ab57.ru |
|