Файловый протокол Степан Ильин aka Step Хакер, номер #076, стр. 076-020-2 В случае успешной авторизации сервер отправляет клиенту специальное сообщение с кодом 230 — User logged in, proceed. Это значит, что он внутри! Управляющее соединение при этом не закрывается, т.к. оно остается активным и всегда готово для передачи команд на сервер. Как уже было сказано, некоторые из них инициализируют открытие еще одного соединения для передачи данных. Оно также относится к TCP-типу и устанавливается на 20-ом порту сервера, т.е. на единицу меньшем, чем порт управляющего соединения. Номер порта со своей стороны клиент выбирает самостоятельно и передает его серверу с помощью команды PORT. Эта команда имеет шесть параметров в виде десятичных чисел, которые разделены между собой запятыми. Первые четыре числа представляют собой специфическую запись IP-адреса, а два последних — номер порта. Это легко показать на примере. Так, команда PORT 192,168,0,2,5,114 ссылается на IP-адрес 192.168.0.2 и порт 5*256+114=1394. Т.к. клиент формирует команду самостоятельно, то и ее параметры может указать совершено произвольные, например, вместо информации о себе подсунуть «координаты» другого FTP-сервера. Замечу, что это не брешь в протоколе, а намеренный шаг. Такой прием очень часто используется для организации прямого соединения двух серваков, чтобы напрямую по быстрым инет-каналам передавать между ними данные. Упомянутая мною команда PORT характерна для так называемого активного режима работы c FTP (active mode). Логично предположить, что существует еще и пассивный вариант (passive mode). Так и есть. В пассивном режиме клиент локально открывает два так называемых непривилегированных порта (N>1024 и N+1). Первый из них как обычно используется для организации информационного канала с 21-м портом сервера. Однако после соединения и авторизации на сервере клиент не посылает команду PORT, а вместо нее передает команду PASV (переход в пассивный режим работы). В результате, сервер сам открывает произвольный порт (P>1024) и передает информацию о нем с помощью команды PORT. Клиенту в этом случае остается только установить на него TCP-соединение, со своей стороны используя заведомо открытый локальный порт N+1. Важно отметить, что канал для передачи данных используется не только для транспортировки файлов между клиентом и сервером. Помимо этого, по нему также передается содержимое каталогов (команда LIST). Впрочем, для многих других команд его инициализация не требуется. Так, FTP-клиент вполне может обойтись без него для того, чтобы переименовать или удалить файл/каталог, изменить текущую папку и т.д. |