LINUX.ORG.RU

Ответ на: комментарий от suv121

для установки активного режима посылаешь команду PORT вместе с номером порта( >1014 ).... ну и там юзернейм с паролем...

redpunk
()
Ответ на: комментарий от redpunk

после того как я пошлю PORT , мне нужно вызвать коннект на указанный порт?

sprintf(tosend, "PORT 127,0,0,1,9,93\n"); 
bytes_send = send(sock, tosend, strlen(tosend), 0); 
bytes_read = recv(sock, buffer, MAXBUF, 0);
 printf("%s", buffer); bzero(tosend, MAXBUF); 
host = gethostbyname(hostname); 
bzero(&dest, sizeof(dest)); 
dest.sin_family = AF_INET; dest.sin_port = htons((9*256+93)); 
dest.sin_addr.s_addr = *(long*)(host->h_addr);
 if (connect(sock2, &dest, sizeof(dest)) != 0)
 {
 printf("Connection fail!\n");
 } 
sprintf(tosend, "LIST\n"); 
bytes_send = send(sock2, tosend, strlen(tosend), 0);
 bytes_read = recv(sock2, buffer, MAXBUF, 0);
 printf("%s", buffer);[\code=C]

suv121
() автор топика
Ответ на: комментарий от suv121

Нужно сначала авторизоваться на сервере.
«второе соединение для передачи данных» - устанавливается для передачи
файла или списка каталога и закрывается по окончании передачи файла или
списка (есть новые расширения FTP, которые я не знаю, там может и не так).
Всю последовательность обмена удобно посмотреть в тоталкомандере в окне
справа вверху (двойной клик). Встроенный UNIX-FTP-клиент тоже имеет опцию
для распечатки всего обмена.

Перед посылкой команды PORT нужно создать слушающий сокет, его данные задать в команде PORT. Коннектиться будет сервер. Вот пример команды PORT:

PORT 192,168,0,101,208,181
Что означают эти цыфры, хорошо написано здесь:
http://panda.ispras.ru/~ipv6/ftp-alg.html

Важно не потерять синхронизацию. Все команды, не использующие дата-канал,
отвечаются одним ответом. Команды, использующие дата-канал, отвечаются
одним или двумя ответами. Например:

RETR start_sokol.sh
150 Opening BINARY mode data connection
226 Transfer complete

RETR .rhosts
451 Local error encountered

LIST
150 Here comes the directory listing
451 Transfer aborted. Broken pipe

В ответах сервера выпарсивайте код ответа, и, как правило, достаточно первой
цыфры кода.
Ответы бывают многострочные, например:

HELP
214-help
LIST  RETR  STOR  QUIT  USER  PASS  NOOP  TYPE
PORT  PASV  HELP  FEAT  SYST  PWD   SIZE  ABOR
DELE  RMD   MKD   RNFR  RNTO  CDUP  CWD
214 end
Все ответы начинаются с кода. Последняя строка ответа начинается с этого же кода,
но за кодом нет тире.
Например:
200 PORT command successful
Это первая и последняя строка ответа.

Простой самодельный FTP-клиент на СИ можно посмотреть здесь:
http://89.108.108.125:8282/client_ftp_public_1.txt
Функция make_data() -установление дата-канала.

oleg_2
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.