Как пользоваться Telnet

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 - номер команды. Теперь кратенькое описание по запросам:

  1. helo. после команды helo пишется имя сервера, который подключился к данному mail серверу. В данном случае я подключался с localhost'а, поэтому тут я и указал localhost.
  2. mail from используется для указания отправителя письма.
  3. rcpt to используется для указания получателя письма.
  4. data. После ввода команды data сервер будет принимать сообщение, пока не встретит "." в строке.
  5. текст нашего сообщения
  6. завершающая ".".
  7. Команда quit используется для закрытия соединения с сервером.

Это простейший способ отправки текстового сообщения, которого вполне достаточно для тестирования любого почтового сервера(естественно просматривая при этом на другой консоли maillog).

  • Аутентификация при отправке.

Второе, что необходимо тестировать - аутентификацию пользователей. Для этого так же необходимо соединиться с сервером, но перед этого необходимо закодировать логин и пароль пользователя. Я для этого использую perl:

exim# perl -MMIME::Base64 -e 'print encode_base64("\0test\@exim.teachers\0pass")'
AHRlc3RAZXhpbS50ZWFjaGVycwBwYXNz

Здесь мы закодировали данные для логина: test@exim.teachers и для пароля: pass. Кодировать данные таким образом нужно для PLAIN аутентификации. Для LOGIN аутентификации данные нужно кодировать в два этапа:

  1. кодирование логина
    exim# perl -MMIME::Base64 -e 'print encode_base64("test\@exim.teachers")'
    dGVzdEBleGltLnRlYWNoZXJz
  2. кодирование пароля
    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";'

Теперь можно проверять:

  • для PLAIN:
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.
  • для LOGIN
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 все. Как видите, нет ничего сложного в том, чтобы отправить почту.

Попробуем получить почту с сервера POP3. С 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

.

Итак, описание по командам:

  1. Команда user указывает имя пользователя
  2. команда pass указывает пароль пользователя
  3. list выводит список всех сообщений, хранящихся на сервере
  4. retr заставляет сервер вывести сообщение. В качестве параметра передается номер сообщения, который выводится по команде List
  5. аналогично smtp команде
PQ VPS сервера в 28+ странах.