20.01.2015 Views

ИюНь - Xakep Online

ИюНь - Xakep Online

ИюНь - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

coding<br />

Игорь «Spider_NET» Антонов<br />

Тру-хакерский FTP<br />

Куем коммерческий FTP-клиент без использования компонентов<br />

FTP-клиент — одна из самых часто используемых утилит в повседневной жизни продвинутого<br />

пользователя. Закачать html-странички, слить warez с сервака, качнуть фильмов<br />

в локалке — работа FTP-клиента. Стоимость таких программ на рынке колеблется от 10<br />

до 100 баксов. Скажи, тебе не хочется срубить столько же, да еще и не особо напрягаясь<br />

Если ты решительно ответил «Да», то усаживайся поудобнее и читай статью, познавая секреты<br />

программирования FTP-клиентов. Никаких компонентов, никаких чужих библиотек<br />

— все свое, родное!<br />

Теория FTP-протокола<br />

File transfer protocol (протокол передачи файлов) берет свое начало в 70‐х.<br />

Именно в то время возникла необходимость в создании протокола, который<br />

смог бы решить проблему передачи файлов с одного компьютера на другой.<br />

На протяжении 30 лет протокол неоднократно менялся и совершенствовался.<br />

Последняя спецификация приведена в RFC 959 (http://athena.vvsu.<br />

ru/docs/tcpip/rfc/rfc959.txt). Я очень рекомендую тебе скачать этот документ<br />

и хорошенько с ним ознакомиться, поскольку только в нем ты найдешь<br />

ответы на вопросы, которые могут возникнуть у тебя при написании полноценного<br />

FTP-клиента. Как и большинство сетевых протоколов (HTTP, POP3,<br />

SMTP и др.), FTP работает поверх TCP. В отличие от всех перечисленных<br />

протоколов, FTP обладает одной интересной особенностью. Для полноценной<br />

работы ему нужно не одно, а целых два соединения:<br />

1. Управляющее — используется на протяжении всего сеанса связи. По<br />

этому соединению отправляются все команды для FTP-сервера и возвращаются<br />

результаты их выполнения.<br />

2. Соединение для передачи данных — создается в момент, когда нужно<br />

получить/отправить данные. После передачи данных соединение должно<br />

завершиться.<br />

Установка соединения<br />

Давай подробно рассмотрим процесс установки связи с FTP-сервером.<br />

Чтобы выполнить какую-либо команду, клиенту нужно установить<br />

/ 110<br />

управляющее соединение. Сделать это можно, подключившись на 21‐й<br />

порт (порт по умолчанию у большинства FTP-серверов) удаленного компьютера.<br />

Как только соединение будет установлено, FTP-сервер отправит<br />

приветствие. Обычно в нем содержится название используемого сервера<br />

и другие данные. Для продолжения работы клиенту необходимо пройти<br />

авторизацию — отправить серверу свой логин и пароль. Логин передается<br />

командой USER [имя пользователя], а пароль — командой PASS [твой<br />

пароль]. Если введенные данные окажутся верными, то сервер радостно<br />

отправит сообщение с кодом «230 OK». Текст этого сообщения означает,<br />

что авторизация успешно пройдена и можно отправлять команды.<br />

Наглядный пример установки управляющего соединения ты можешь<br />

увидеть на рисунке, где изображено, как с помощью telnet я подсоединился<br />

к ftp-серверу.<br />

После установки управляющего соединения можно посылать команды для<br />

получения списка файлов или же для копирования самих файлов, но перед<br />

этим необходимо установить второе соединение — для передачи данных.<br />

Я уже много раз говорил о соединении для передачи данных, но до сих пор<br />

ничего не сказал о принципах его создания. Первым делом программеклиенту<br />

нужно открыть любой свободный порт. Затем удаленному серверу<br />

необходимо послать данные в специальном формате, которые будут<br />

включать IP-адрес (твой реальный IP) и порт (тот, который ты и открывал для<br />

подключения). Все эти данные отправляются с помощью команды PORT.<br />

Если ты читал внимательно, то, наверное, обратил внимание на упоминание<br />

xàêåð 06 /102/ 07

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!