Для академических целей попробуем подключиться к FTP с использованием утилиты telnet.
Для успешного скачивания файла нам потребуется две открытые консоли и калькулятор. Вместо telnet можно использовать nc/netcat. Подключаться будем в пассивном режиме.
Авторизируемся:
$ telnet mirror.yandex.ru 21
Trying 213.180.204.183...
Connected to mirror.yandex.ru.
Escape character is '^]'.
220-Welcome to Yandex Mirror FTP service. Your served by: node01d.mirror.yandex.net
220
USER anonymous
331 Please specify the password.
PASS a@b.ru
230 Login successful.
Открываем на сервере порт для "пассивного" подключения:
PASV
227 Entering Passive Mode (213,180,204,183,221,153).
Здесь мы видим параметры для ВТОРОГО подключения. Первые четыре числа -- это ip-адрес сервера, пятое и шестое -- это порт для подключения. Вычисляется по формуле: первое*256 + второе.
Не закрывая первую консоль во второй консоли пишем:
$ telnet mirror.yandex.ru 56729
Trying 213.180.204.183...
Connected to mirror.yandex.ru.
Escape character is '^]'.
В рамках этого соединения мы можем только получать данные. Вот примерный список FTP-команд:
ABOR - прервать передачу
CWD - сменить директорию
DELE - удалить файл на сервере
LIST - детальный список файлов на сервере
MDTM - узнать время модификации файла
MKD - создать каталог на сервере
NLST - упрощенный список файлов на сервере
PASS - отправить пароль
PASV - перейти в пассивный режим
PORT - заставить сервер подключиться к клиенту на определенный порт (активный режим)
PWD - вывести название текущего каталога
QUIT - окончить соединение
RETR - скачать файл с сервера
RMD - удалить каталог на сервере
RNFR - переименовать из
RNTO - переименовать в
SITE - серверо-специфицеские команды
SIZE - узнать размер файла
STOR - залить файл на сервер
TYPE - установить режим передачи
USER - отправить пользовательский логин
Пользуясь командами (и переподключаясь во второй консоли каждый раз на новый порт, который нам указывает сервер, скачиваем файл.
Первая консоль:
LIST
150 Here comes the directory listing.
226 Directory send OK.
CWD pub
250 Directory successfully changed.
PASV
227 Entering Passive Mode (213,180,204,183,217,235).
LIST
150 Here comes the directory listing.
226 Directory send OK.
CWD tools
250 Directory successfully changed.
PASV
227 Entering Passive Mode (213,180,204,183,230,239).
LIST
150 Here comes the directory listing.
226 Directory send OK.
CWD crosstool
250 Directory successfully changed.
PASV
227 Entering Passive Mode (213,180,204,183,230,34).
LIST
150 Here comes the directory listing.
226 Directory send OK.
PASV
227 Entering Passive Mode (213,180,204,183,202,255).
RETR index.html
150 Opening BINARY mode data connection for index.html (6922 bytes).
226 Transfer complete.
Вторая консоль:
$ telnet mirror.yandex.ru 56729
Trying 213.180.204.183...
Connected to mirror.yandex.ru.
Escape character is '^]'.
drwxr-xr-x 17 ftp ftp 4096 Jul 22 03:27 altlinux
drwxr-sr-x 20 ftp ftp 4096 Jul 21 10:29 altlinux-beta
drwxr-xr-x 7 ftp ftp 4096 Jul 21 10:43 altlinux-nightly
drwxr-xr-x 17 ftp ftp 4096 Jul 22 07:38 archlinux
drwxr-xr-x 7 ftp ftp 4096 Jul 21 10:56 archserver
drwxr-sr-x 6 ftp ftp 4096 Sep 17 2007 asplinux-tigro
drwxr-xr-x 4 ftp ftp 4096 Jul 21 10:56 astra
drwxr-xr-x 39 ftp ftp 4096 Jul 21 10:35 calculate
drwxrwxr-x 38 ftp ftp 4096 Jul 22 05:06 centos
drwxr-xr-x 8 ftp ftp 4096 Jul 22 03:53 debian
drwxrwsr-x 6 ftp ftp 4096 Jul 22 03:22 debian-backports
drwxr-xr-x 5 ftp ftp 4096 Jul 22 02:36 debian-cd
drwxrwxr-x 6 ftp ftp 4096 Jul 22 01:04 debian-multimedia
drwxrwsr-x 6 ftp ftp 4096 Jul 21 10:34 debian-security
drwxr-sr-x 7 ftp ftp 4096 Jul 21 20:40 epel
drwxr-xr-x 7 ftp ftp 4096 Jul 22 05:08 fedora
drwxrwxr-x 12 ftp ftp 4096 Jul 22 04:21 freebsd
drwxr-xr-x 6 ftp ftp 4096 Jul 22 07:32 gentoo-distfiles
drwxrwxr-x 169 ftp ftp 4096 Jul 22 07:32 gentoo-portage
drwxr-xr-x 10 ftp ftp 12288 Jul 21 10:08 knoppix
drwxr-xr-x 3 ftp ftp 4096 Jul 22 02:04 libreoffice
drwxr-xr-x 7 ftp ftp 4096 Jul 21 10:32 linuxmint
drwxr-xr-x 5 ftp ftp 4096 Jul 22 04:24 macports
drwxr-xr-x 6 ftp ftp 4096 Jul 22 07:32 mageia
drwxr-xr-x 39 ftp ftp 4096 Jun 30 09:26 mirrors
drwxr-xr-x 6 ftp ftp 4096 Mar 11 14:53 mopslinux
drwxr-xr-x 8 ftp ftp 4096 Jul 22 07:40 mozilla
drwxr-xr-x 48 ftp ftp 4096 Jul 22 02:18 openbsd
drwxr-xr-x 5 ftp ftp 4096 Jul 22 05:06 openmandriva
drwxr-xr-x 8 ftp ftp 4096 Jul 21 17:33 opensuse
drwxr-xr-x 8 ftp ftp 4096 Jul 22 06:07 pub
drwxr-xr-x 8 ftp ftp 4096 Jul 21 10:31 puppyrus
drwxr-xr-x 10 ftp ftp 4096 Jul 22 05:32 rosa
drwxr-xr-x 4 ftp ftp 4096 Jul 21 10:33 runtu
drwxrwxr-x 5 ftp ftp 4096 Jul 22 04:32 sabayon
drwxr-xr-x 13 ftp ftp 4096 Jul 22 04:32 scientificlinux
drwxr-xr-x 6 ftp ftp 4096 Apr 02 17:53 simplelinux
drwxr-xr-x 42 ftp ftp 4096 Jul 22 00:34 slackware
drwxr-xr-x 6 ftp ftp 4096 Jul 22 02:09 ubuntu
drwxr-xr-x 30 ftp ftp 4096 Jul 22 04:16 ubuntu-cdimage
drwxr-xr-x 12 ftp ftp 4096 Jul 22 06:16 ubuntu-releases
Connection closed by foreign host.
$ telnet mirror.yandex.ru 55787
Trying 213.180.204.183...
Connected to mirror.yandex.ru.
Escape character is '^]'.
lrwxrwxrwx 1 ftp ftp 11 Feb 17 2013 FreeBSD -> ../freebsd/
lrwxrwxrwx 1 ftp ftp 11 Feb 17 2013 OpenBSD -> ../openbsd/
drwxr-xr-x 13 ftp ftp 4096 Nov 16 2011 linux
drwxrwxr-x 3 ftp ftp 4096 Sep 23 2008 media
drwxr-xr-x 15 ftp ftp 4096 Aug 03 2013 scm
drwxrwxr-x 2 ftp ftp 4096 Aug 09 2013 site
drwxr-xr-x 13 ftp ftp 4096 Nov 27 2011 software
drwxr-xr-x 3 ftp ftp 4096 Apr 30 2008 tools
Connection closed by foreign host.
$ telnet mirror.yandex.ru 59119
Trying 213.180.204.183...
Connected to mirror.yandex.ru.
Escape character is '^]'.
drwxrwxr-x 3 ftp ftp 4096 May 22 2013 crosstool
Connection closed by foreign host.
$ telnet mirror.yandex.ru 58914
Trying 213.180.204.183...
Connected to mirror.yandex.ru.
Escape character is '^]'.
drwxrwxr-x 5 ftp ftp 4096 Mar 28 2012 files
-rw-rw-r-- 1 ftp ftp 6922 May 22 2013 index.html
-rw-rw-r-- 1 ftp ftp 543 May 22 2013 index.html.sign
-rw-r--r-- 1 ftp ftp 962 Apr 02 07:57 sha256sums.asc
Connection closed by foreign host.
$ telnet mirror.yandex.ru 51967
Trying 213.180.204.183...
Connected to mirror.yandex.ru.
Escape character is '^]'.
[тут вырезано содержимое получаемого файла]
Connection closed by foreign host.