TELNET (TErminaL NETwork) — сетевой протокол для реализации текстового интерфейса по сети (в современной форме — при помощи транспорта TCP). Название «telnet» имеют также некоторые утилиты, реализующие клиентскую часть протокола. Современный стандарт протокола описан в RFC 854.
Часто, при настройке сетевых сервисов (таких как Postfix, Apache) возникает необходимость протестировать их работу, не прибегая к использованию специальных утилит(например, почтовых клиентов, веб- браузеров). В этом случае используется утилита telnet.
По умолчанию Telnet в Windows 11/10 отключен. включить или отключить Telnet в Windows 11 и 10 при помощи командной строки (cmd) запущенной с правами Администратора, то введите:
# включить dism /online /Enable-Feature /FeatureName:TelnetClient # отключить dism /Online /Disable-Feature /FeatureName:TelnetClient
В командной строке введите команду:
telnet имя_сервера номер_порта или telnet IP_сервера номер_порта
Если командная строка или терминал возвращает ошибку, то порт закрыт. Если окно становится полностью пустым или на экране появляется приглашение сервера, порт открыт.
Telnet и получение HEAD HTTP запрос запроса протокола Коды состояния HTTP. Методы и структура протокола HTTP.
Проверка Кода Состояния HTTP с помощью Telnet.
$ telnet [СЕРВЕР] [ПОРТ] Trying xxx.xxx.xxx.xxx... Connected to [СЕРВЕР]. Escape character is '^]'. HEAD [ВЕБ-СТРАНИЦА] HTTP/1.1 HOST: [СЕРВЕР] <Нажмите ENTER>
Например:
telnet> open websl.biz 80 Trying 65.52.137.176... Connected to websl.biz. Escape character is '^]'. HEAD / HTTP/1.1 HOST: websl.biz HTTP/1.1 200 OK Cache-Control: private Content-Length: 5825 Content-Type: text/html; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNetMvc-Version: 3.0 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Mon, 28 Jan 2013 21:25:15 GMT
Тестирование почтового сервера (MTA) при помощи telnet: отправка и получение почты. Для грамотного тестирования необходимо знать RFC, описывающий работу протокола SMTP.
[fr33man@exim ~]$ telnet localhost 25 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mx.exim.teachers, ESMTP EXIM 4.66 -1> helo localhost 250 mx.exim.teachers Hello localhost [127.0.0.1] -2> mail from: <root@exim.teachers> 250 OK -3> rcpt to: <test@exim.teachers> 250 Accepted -4> data 354 Enter message, ending with "." on a line by itself -5> test -6> . 250 OK id=1HJa5R-0005Fe-Ln -7> quit 221 mx.exim.teachers closing connection Connection closed by foreign host. [fr33man@exim ~]$
Запросы, которые вы должны посылать серверу выделены "-N>", где N - номер команды. Теперь кратенькое описание по запросам:
Это простейший способ отправки текстового сообщения, которого вполне достаточно для тестирования любого почтового сервера(естественно просматривая при этом на другой консоли maillog).
Второе, что необходимо тестировать - аутентификацию пользователей. Для этого так же необходимо соединиться с сервером, но перед этого необходимо закодировать логин и пароль пользователя. Я для этого использую perl:
exim# perl -MMIME::Base64 -e 'print encode_base64("\0test\@exim.teachers\0pass")' AHRlc3RAZXhpbS50ZWFjaGVycwBwYXNz
Здесь мы закодировали данные для логина: test@exim.teachers и для пароля: pass. Кодировать данные таким образом нужно для PLAIN аутентификации. Для LOGIN аутентификации данные нужно кодировать в два этапа:
exim# perl -MMIME::Base64 -e 'print encode_base64("test\@exim.teachers")' dGVzdEBleGltLnRlYWNoZXJz
exim# perl -MMIME::Base64 -e 'print encode_base64("pass")' cGFzcw==
Аналогичного результата можно добиться PHP скриптом, запустив в консоли команду
$ php -r 'echo "\n".base64_encode("test@exim.teachers")."\n".base64_encode("pass")."\n";'
Теперь можно проверять:
exim# telnet localhost 25 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mx.exim.teachers, ESMTP EXIM 4.66 ehlo localhost 250-mx.exim.teachers Hello localhost [127.0.0.1] 250-SIZE 2097152 250-PIPELINING 250-AUTH PLAIN LOGIN CRAM-MD5 250-STARTTLS 250 HELP AUTH PLAIN 334 AHRlc3RAZXhpbS50ZWFjaGVycwBwYXNz 235 Authentication succeeded quit 221 mx.exim.teachers closing connection Connection closed by foreign host.
exim# telnet localhost 25 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mx.exim.teachers, ESMTP EXIM 4.66 ehlo localhost 250-mx.exim.teachers Hello localhost [127.0.0.1] 250-SIZE 2097152 250-PIPELINING 250-AUTH PLAIN LOGIN CRAM-MD5 250-STARTTLS 250 HELP AUTH LOGIN 334 VXNlcm5hbWU6 dGVzdEBleGltLnRlYWNoZXJz 334 UGFzc3dvcmQ6 cGFzcw== 235 Authentication succeeded quit 221 mx.exim.teachers closing connection Connection closed by foreign host.
Как видите, все опять прошло успешно.
В команде ehlo клиент посылает свое имя(имя компьютера). После этого сервер возвращает возмодные способы аутентификации. В данном случае мы использовали два варианта: PLAIN и LOGIN аутентификацию.
С протоколом SMTP все. Как видите, нет ничего сложного в том, чтобы отправить почту.
Попробуем получить почту с сервера POP (Post Office Protocol). С pop3 все относительно просто:
exim# telnet localhost 110 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Hello there. -1> user test@exim.teachers +OK Password required. -2> pass pass +OK logged in. -3> list +OK POP3 clients that break here, they violate STD53. 1 1953 2 337 . -4> retr 1 +OK 1953 octets follow. Return-path: <root@exim.teachers> Envelope-to: test@exim.teachers Delivery-date: Tue, 20 Feb 2007 18:46:12 +0300 Received: from root by mx.exim.teachers with local (Exim 4.66 (FreeBSD)) (envelope-from <root@exim.teachers>) id 1HJXC0-000597-6r for test@exim.teachers; Tue, 20 Feb 2007 18:46:12 +0300 To: test@exim.teachers Subject: test Message-Id: <E1HJXC0-000597-6r@mx.exim.teachers> From: Charlie Root <root@exim.teachers> Date: Tue, 20 Feb 2007 18:46:12 +0300 # $FreeBSD: src/etc/master.passwd,v 1.40 2005/06/06 20:19:56 brooks Exp $ # root:*:0:0:Charlie &:/root:/bin/csh toor:*:0:0:Bourne-again Superuser:/root: daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin operator:*:2:5:System &:/:/usr/sbin/nologin bin:*:3:7:Binaries Commands and Source:/:/usr/sbin/nologin tty:*:4:65533:Tty Sandbox:/:/usr/sbin/nologin kmem:*:5:65533:KMem Sandbox:/:/usr/sbin/nologin games:*:7:13:Games pseudo-user:/usr/games:/usr/sbin/nologin news:*:8:8:News Subsystem:/:/usr/sbin/nologin man:*:9:9:Mister Man Pages:/usr/share/man:/usr/sbin/nologin sshd:*:22:22:Secure Shell Daemon:/var/empty:/usr/sbin/nologin smmsp:*:25:25:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin mailnull:*:26:26:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin bind:*:53:53:Bind Sandbox:/:/usr/sbin/nologin proxy:*:62:62:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin _pflogd:*:64:64:pflogd privsep user:/var/empty:/usr/sbin/nologin _dhcp:*:65:65:dhcp programs:/var/empty:/usr/sbin/nologin uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico pop:*:68:6:Post Office Owner:/nonexistent:/usr/sbin/nologin www:*:80:80:World Wide Web Owner:/nonexistent:/usr/sbin/nologin nobody:*:65534:65534:Unprivileged user:/nonexistent:/usr/sbin/nologin clamav:*:106:106:Clam Antivirus:/nonexistent:/sbin/nologin courier:*:465:465:Courier Mail System:/var/spool/courier:/sbin/nologin . -5> quit +OK Bye-bye. Connection closed by foreign host
.
Итак, описание по командам: