Работа по протоколу FTP через telnet

28.02.2020

Теги: CLIFTPСервер

FTP — протокол передачи файлов по сети, является одним из старейших прикладных протоколов, появившихся задолго до HTTP, и даже до TCP/IP, в 1971 году. Протокол построен на архитектуре «клиент-сервер» и использует разные сетевые соединения для передачи команд и данных между клиентом и сервером. Пользователи FTP могут подключиться анонимно или пройти аутентификацию.

У меня две виртуальные машины — ftp-client и ftp-server (ip-адрес 192.168.30.21) в одной сети. Открываем окно терминала на машине ftp-client:

$ telnet 192.168.30.21 21
Trying 192.168.30.21...
Connected to 192.168.30.21.
Escape character is '^]'.
220 (vsFTPd 3.0.3)

Передаем имя пользователя и пароль:

$ telnet 192.168.30.21 21
Trying 192.168.30.21...
Connected to 192.168.30.21.
Escape character is '^]'.
220 (vsFTPd 3.0.3)
USER evgeniy
331 Please specify the password.
PASS qwerty
230 Login successful.

Запросы клиента всегда состоят из одной строки формата КОМАНДА [аргументы], в то время как ответы сервера могут содержать несколько строк.

Первая и последняя строки начинается с трех цифр, представляющих собой код ответа, за которыми идет текстовое описание ответа, отделенное от кода либо пробелом, либо тире. Если в качестве разделителя используется пробел, значит строка является последней в ответе (и, возможно, единственной), иначе — это первая строка многострочного ответа.

Выполним еще одну команду — PWD:

$ telnet 192.168.30.21 21
Trying 192.168.30.21...
Connected to 192.168.30.21.
Escape character is '^]'.
....................
PWD
257 "/home/evgeniy" is the current directory

Теперь попробуем выполнить команду LIST. Для этого надо перейти в пассивный режим — тогда сервер сообщит нам, на какой порт выполнять соединение, чтобы получить ответ. Дело в том, что результат команды LIST отправляется не через управляющее соединение, а через соединение для передачи данных:

$ telnet 192.168.30.21 21
Trying 192.168.30.21...
Connected to 192.168.30.21.
Escape character is '^]'.
220 (vsFTPd 3.0.3)
....................
PASV
227 Entering Passive Mode (192,168,30,21,234,161).

В ответе сервера есть ip-адрес сервера и порт, на котором клиент должен установить соединение. Адрес — это первые четыре числа, порт — это последние два числа. Порт можно вычислить так: 234*256+161=60065. Так что открываем еще одно окно терминала и выполняем команду:

$ telnet 192.168.30.21 60065
Trying 192.168.30.21...
Connected to 192.168.30.21.
Escape character is '^]'.

Теперь выполняем в первом окне терминала команду LIST и смотрим ответ во втором окне:

$ telnet 192.168.30.21 60065
Trying 192.168.30.21...
Connected to 192.168.30.21.
Escape character is '^]'.
-rw-rw-r--    1 1000     1000       361278 Feb 22 15:25 image.jpg
drwxrwx---    1 0        999          4096 Feb 22 13:52 share
drwx------    2 1000     1000         4096 Feb 24 14:53 test
Connection closed by foreign host.

В списке есть файл image.jpg. Давайте удалим его с помощью команды DELE:

$ telnet 192.168.30.21 21
Trying 192.168.30.21...
Connected to 192.168.30.21.
Escape character is '^]'.
220 (vsFTPd 3.0.3)
....................
DELE image.jpg
250 Delete operation successful.

Изменим текущую директорию:

$ telnet 192.168.30.21 21
Trying 192.168.30.21...
Connected to 192.168.30.21.
Escape character is '^]'.
220 (vsFTPd 3.0.3)
....................
CWD share
250 Directory successfully changed.

В директории share есть файл readme.txt. Получить его с помощью telnet мы не сможем, для этого нужен ftp-клиент, но посмотреть содержимое — можем. Перейдем в пассивный режим с помощью команды PASV, во втором окне терминала подключимся к ftp-серверу на указанном порту и выполним команду RETR readme.txt (скачать файл) в первом окне:

$ telnet 192.168.30.21 21
Trying 192.168.30.21...
Connected to 192.168.30.21.
Escape character is '^]'.
220 (vsFTPd 3.0.3)
....................
PASV
227 Entering Passive Mode (192,168,30,21,234,144).
RETR readme.txt
150 Opening BINARY mode data connection for readme.txt (36 bytes).
226 Transfer complete.
$ telnet 192.168.30.21 60045
Trying 192.168.30.21...
Connected to 192.168.30.21.
Escape character is '^]'.
This is content of file readme.txt.
Connection closed by foreign host.

На этом все — выходим из telnet:

QUIT
221 Goodbye.
Connection closed by foreign host.

Основные команды:

Команда Код Описание
DELE 250 Удалить файл
RMD 250 Удалить директорию
CWD 250 Перейти в директорию
MKD 257 Создать директорию
PWD 257 Узнать текущую директорию
QUIT 221 Закончить работу
TYPE 200 Установить тип передачи
PORT 200 Перейти в активный режим
PASV 227 Перейти в пассивный режим
LIST 150,226 Получить содержимое каталога
RETR 150,226 Скачать файл
STOR 150,226 Закачать файл
ABOR 426,226 Отменить передачу
RNFR 350 Выбрать файл для переименования
RNTO 250 Переименовать файл

Поиск: CLI • FTP • Сервер • Протокол • telnet

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.