![]() |
FTP server
Возникла нужда поднять фтп сервер с единственной функцией - закачивать на фтп сервер файлы.
задача вроде бы простая, но не нашел никакой документации (RFC 765 везде на англ.) на русском языке. не много отснифил общение стандартного фтп клиента винды с фтп серером но толком не разобрался. в итоге состряпал это: Код:
|
на сервере порт 21-й с клиентской наплевать какой для режима пользователя(telnet)!
далее при попытке передачи... сервер вернет клиенту PORT N... и открывается 2-й коннект пусть линуксоиды тебе кинут сорцы типа ProFTPD - FTP server daemon небольшой ftp.h Код:
00001 |
я не совсем понял пример ((((
ковыряя компоненты разные нашел что команда Код:
PORT a1,a2,a3,a4,p1,p2(p1*256)+p2 однако на практике открывается другой порт, проверял снифером и фаерволом. так например Код:
PORT 192,168,1,7,11,247а на самом деле открывается порт 64688 хотя вообще какая то непонятка происходит, вроде порт открывается на фтп сервере, но каким то образом приходит призрачный ТСР пакет от сервера к клиенту (не ясно как, ведь у клиента порт закрыт) и вот только тут порт 3063 задействован. Код:
FTP SRV>> |
в том то и дело, что у клиента открывается порт, сам открвыал порт неткатом, через Total Commander отправлял правильную cтроку PORT, и вводил команды фтп сервера, а сервер ничего не открывает
|
t04, учись читать оригинальную документацию! В оригинальном виде, тема уже боянистая и тысячу раз избитая. Да и протокол не представляет из себя никаких сложностей. Почитай RFC959:
http://www.w3.org/Protocols/rfc959/ Причём интерес предоставляет именно документ на английском, т.к. он наиболее полный. В конце-концов поищи описание на русском: http://www.soslan.ru/tcp/tcp27.html А что касается твоей проблемы. Проверь ещё раз все байты и их порядок, которые твой сервак получает в команде PORT. Так, например, команда: Цитата:
И учти, что управляющее соединение открыто всегда, а канал данных открывается только при необходимости и закрывается после завершения любой передачи по нему. По ситуации, которую ты описал похоже, что ты не отправляешь команду PORT (или сервер её не обрабатывает?), и тогда сервер начинает по умолчанию использовать тот же самый номер порта, что использовался клиентом для управляющего соединения. И вообще, в каком режиме у тебя сервер принимает клиентские соединения? Пассивный? Активный? Твоя проблема может быть проблемой того, что внешний фаер не пускает соединение сервера на непривилегированный клиентский порт для организации канала данных. В общем ознакомься с документацией, на которую я дал линки. |
| Время: 23:02 |