вторник, 22 июля 2014 г.

FTP через TELNET

Для академических целей попробуем подключиться к 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.