Для чего telnet годится сегодня
Как протокол удалённого доступа telnet давно вытеснен SSH, потому что передаёт данные, включая пароли, открытым текстом. Но как инструмент проверки он по-прежнему полезен: команда telnet адрес порт устанавливает обычное TCP-соединение и оставляет вам открытый канал. Если соединение состоялось, значит порт на сервере слушает, а по пути его не отбрасывает межсетевой экран.
Для диагностики этого хватает. Вы проверяете, доступна ли почтовая служба на порту 25, отвечает ли веб-сервер на 80, открыт ли проброшенный порт на домашнем роутере. Проверять стоит только свои узлы и те, к которым у вас есть законный доступ.
Никогда не вводите пароли и личные данные в сеансе telnet: всё уходит в сеть открытым текстом. Используйте его только для проверки доступности и чтения приветствия сервера.
Как включить клиент Telnet в Windows
В Windows 10 и 11 клиент по умолчанию отключён, поэтому при вызове команды вы увидите сообщение, что telnet не является внутренней или внешней командой. Включить его можно двумя способами.
- Через интерфейс: откройте «Включение или отключение компонентов Windows» (команда optionalfeatures), отметьте «Клиент Telnet» и подтвердите.
- Через командную строку от имени администратора: dism /online /Enable-Feature /FeatureName:TelnetClient.
- Через PowerShell от имени администратора подходит Enable-WindowsOptionalFeature -Online -FeatureName TelnetClient.
- После включения откройте новое окно терминала и проверьте: telnet без параметров выдаёт приглашение Microsoft Telnet>.
Если ставить дополнительный компонент нельзя, используйте встроенный командлет Test-NetConnection: он проверяет порт без установки чего-либо, и у него есть отдельная инструкция.
Отличия для macOS и Linux
В современных версиях macOS клиента telnet нет, и нативная замена — nc с ключом -z (об этом отдельная страница). Если telnet всё же нужен, его можно поставить через Homebrew. В Linux пакет обычно называется telnet или inetutils-telnet, и ставится менеджером пакетов; многие дистрибутивы теперь не включают его в базовую установку.
Синтаксис везде одинаков: telnet example.com 443. Порт указывается вторым словом, через пробел, а не двоеточием. Если порт не указан, используется 23, порт самого протокола telnet, и на большинстве узлов он закрыт.
Как читать результат
Результат зависит от клиента, поэтому в таблице разобраны типичные случаи.
| Что вы видите | Смысл |
|---|---|
| Пустой экран или мигающий курсор | Соединение установлено, служба ждёт вашего ввода |
| Строка приветствия, например 220 для почтовой службы | Соединение установлено, служба ответила баннером |
| Could not open connection to the host, on port N: Connect failed | Порт закрыт, хост недоступен или соединение отбрасывается фильтром |
| Connection refused | Хост доступен, но на порту никто не слушает |
| Долгое молчание и таймаут | Пакеты, вероятно, отбрасываются межсетевым экраном |
| Unknown host | Имя не разрешилось, проверьте DNS |
Отказ «refused» и молчание означают разные вещи. Явный отказ приходит от самого узла или его системы: порт закрыт, но узел отвечает. Молчание чаще говорит о фильтре, который просто отбрасывает пакеты. Оба результата не доказывают, что служба неисправна: возможно, она слушает только внутренний адрес.
Выход из сессии и проверка веб-сервера вручную
Сессия telnet не закрывается сама. Нажмите Ctrl и правую квадратную скобку, появится приглашение telnet>, введите quit и подтвердите. В Windows работает то же самое. Если экран завис, закройте окно терминала.
Для обучения можно вручную сделать запрос к веб-серверу: подключитесь на порт 80, напечатайте GET / HTTP/1.1, затем на следующей строке Host: example.com и дважды нажмите Enter. Сервер ответит заголовками и телом страницы. Это работает только для незашифрованного HTTP; для порта 443 telnet не выполнит TLS-рукопожатие и покажет бессмысленный набор символов или закроет соединение. Для https используйте curl.
Чтобы проверить несколько портов подряд, удобнее nc или Test-NetConnection: они возвращают результат сразу и не требуют закрывать сессию вручную. А вот чтобы понять, кто держит порт на вашей стороне, нужны ss, netstat или lsof. Помните, что успешное соединение не означает работоспособность приложения на сервере: оно лишь подтверждает открытость порта. Для полноценной проверки веб-сервиса затем выполните запрос curl и посмотрите код ответа, а для почтовой службы прочитайте баннер и убедитесь, что имя узла в приветствии соответствует ожидаемому. Так вы отделите проблему сети от проблемы самой программы.
Замена telnet современными средствами
Чтобы не держать в системе устаревший клиент, используйте инструменты, которые делают то же самое и понятнее сообщают результат. В Windows это Test-NetConnection с параметрами -ComputerName и -Port: команда возвращает поле TcpTestSucceeded со значением True или False, а заодно показывает адрес, на который разрешилось имя. В Linux и macOS nc -zv узел порт печатает одну строку об успехе или отказе, а ключ -w задаёт таймаут в секундах. Для сравнения с настоящим сканером есть nmap, но применяйте его только к своим узлам.
Когда проверка показала, что порт недоступен, двигайтесь от ближнего к дальнему. Сначала убедитесь, что служба запущена и слушает нужный интерфейс: на сервере это делается через ss или netstat. Затем проверьте локальный межсетевой экран на сервере. Дальше — правила на роутере или облачной панели: группа безопасности, проброс портов. Наконец, уточните у провайдера, не фильтрует ли он порт на своей стороне: порт 25, например, на многих домашних подключениях закрыт по умолчанию.
Хорошая привычка — проверять порт с двух точек: из локальной сети и снаружи. Если изнутри порт открыт, а снаружи нет, причина почти всегда в роутере, проброшенных портах или во внешнем адресе, который у провайдера оказался «серым» и не доступен извне.