Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Сергей Супрунов
Протокол FTP предназначен для передачи файлов по сети. Существует множество очень функциональных ftp-серверов, однако для использования в «личных» целях, как правило, вполне достаточно возможностей входящей в состав FreeBSD программы ftpd.
Программа ftpd представляет собой достаточно простой ftp-сервер. В отличие от таких инструментов, как ProFTPd, PureFTPd и других, ftpd не имеет развитых средств конфигурирования, работы с правами доступа и т. д. Однако если вы не собираетесь строить публичный ftp-сервер, то его возможностей вам вполне хватит для организации «бытовых» функций, таких как обмен файлами между сервером и вашей рабочей машиной, например, для размещения HTML-страниц на веб-сервере или настройки простейшего резервирования.
Начнем с теории
Для начала давайте коротко ознакомимся с самим протоколом FTP. Он описывается довольно объемным документом RFC 959 и определен только для транспортного протокола TCP; UDP-реализации, в отличие от TFTP, нет.
Характерной отличительной особенностью FTP от других протоколов является то, что он для своей работы задействует два порта – порт данных и порт управления. Порт управления используется для установления соединения между клиентом и сервером, для управления режимами работы и т. д.
В то время как порт данных служит для передачи запрашиваемой информации.
Протоколом определены два режима взаимодействия: активный и пассивный, понимание которых крайне важно в случае использования в сети брандмауэров.
Активный режим работы FTP
В активном режиме процесс установления соединения между сервером и клиентом выглядит следующим образом:
n Клиент с непривилегированного порта (с номером больше 1024) отправляет запрос на порт 21 сервера (порт управления).
n После процедуры авторизации (команды USER и PASS) клиент начинает прослушивать порт N и отправляет на сервер команду PORT, сообщающую ему, какой именно порт открыт.
n Сервер, получив команду PORT, устанавливает соединение с указанным портом N со своего порта 20. Это соединение используется для передачи данных.
Посмотрим, как это происходит на практике. Для эмуляции работы управляющего соединения вполне подойдет стандартная утилита telnet. Чтобы посмотреть, как работает порт данных, воспользуемся небольшой программкой на Python:
#!/usr/local/bin/python
# lystener – скрипт для прослушивания указанного порта
import sys, socket
host = str(sys.argv[1])
port = int(sys.argv[2])
s = socket.socket()
s.bind((host, port))
s.listen(1)
m = s.accept()
print 'Connected on', m[1]