Проверка доступности 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 - имя сервера и номер порта для проверки подключения.

    Результат выполнения команды для доступного порта:

    Опрос доступного порта SMTP почтового сервера mail.ru


    Команда смены кодовой страницы chcp 1251 нужна для правильного отображения кириллицы при выполнении psping в среде русскоязычных ОС Windows.

    Признаком доступности порта можно считать наличие строки:

    Sent = 1, Received = 1, Lost = 0 (0% loss),

    Отправлен 1 пакет, получен 1 пакет, потеряно 0 пакетов (0% потерь)

    Если же подключиться к указанному порту невозможно, то выводится сообщение об ошибке:

    Опрос недоступного порта почтового сервера mail.ru


    Признаком недоступности порта можно считать наличие строки:

    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



    Опрос доступного порта SMTP почтового сервера mail.ru утилитой tcping.exe


    Признаком доступности порта можно считать, например, наличие строки 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





    В начало страницы     |     На главную страницу

  • Рейтинг@Mail.ru