URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4052
[ Назад ]

Исходное сообщение
"ftp login"

Отправлено glisy , 10-Мрт-05 12:38 
Hi!
Возникла необходимость написать прогу которая коннектиться к ftp серверу и приозводит на нём некоторые действия. НО не могу залогиниться!!!!! Возможно кусочек кода поможет ответить на вопрос. Зараннее спасибо!
/*
тут я открываю сокет, произвожу коннект и т.д.
*/
printf("CONNECT!!!\n");

read(sockfd, otvet, sizeof(otvet)); /*sockfd дескриптор otvet это char[200]*/

printf("%s", otvet);

snprintf(buff, sizeof(buff), "USER anonymous\r\n");
write(sockfd, buff, sizeof(buff)); /*char buff[200]*/
printf("%s", buff);
read(sockfd, otvet, sizeof(otvet));
printf("%s", otvet);

snprintf(buff, sizeof(buff), "PASS anonymous\r\n");
write(sockfd, buff, sizeof(buff));
printf("%s", buff);
read(sockfd, otvet, sizeof(otvet));
printf("%s", otvet);
printf("\n");
return 0;

/*
Причём "USER anonymous" получает и не ругаеться а говорю PASS мне сообщают что надо залогиниться использую USER PASS.
Просто уже не знаю в чем же дело!
*/


Содержание

Сообщения в этом обсуждении
"ftp login"
Отправлено MaximKuznetsov , 10-Мрт-05 12:48 
>snprintf(buff, sizeof(buff), "USER anonymous\r\n");
>write(sockfd, buff, sizeof(buff)); /*char buff[200]*/
И зачем ты ему туда 200 байт напихал ?

>snprintf(buff, sizeof(buff), "PASS anonymous\r\n");
>write(sockfd, buff, sizeof(buff));
Та же самая фигня - передавай только ту информацию которую надо, а несь буфер - в нем мусора до вола.

Плюс к тому к качестве пароля неплохо использовать нечто похожее не email - строчку с собачкой

>/*
>Причём "USER anonymous" получает и не ругаеться а говорю PASS мне сообщают
>что надо залогиниться использую USER PASS.
>Просто уже не знаю в чем же дело!
>*/

P.S проще было-бы все это сделать на expect`е ...


"ftp login"
Отправлено glisy , 10-Мрт-05 12:52 
Спасибо большое....



"ftp login"
Отправлено rgo , 15-Мрт-05 07:02 
Совет из моего личного опыта, сделай так (просто рази удобства):

FILE* sockf;

sockf = fdopen (sockfd, "r+");

fputs (sockf, "USER anonymous\r\n");

... и так далее.



"ftp login"
Отправлено glisy , 17-Мрт-05 13:25 
Всем большое спасибо.. сейчас уже много работает, но есть проблемма до решения которой я никак не могу додуматься...Проблема такая : нужно получить список ВСЕХ файлов и директорий с ftp сервера. Как это начал раелизовывать я и на чём остановился: 1 получаю список файлов и с помошью функции sscanf() понимаю что первый файл являеться директорией или обычным файлом (drwxrwxrwx) а из конца беру имя этого файли и если эта директория то говорю cwd "%s" dirname таким образом я дохожу до того момента когда директории заончаться (опято же я простоматриваю только первую директорию в первой директории и т.д. ну а это меня не устраивает так как нужно получить полный список файлов) подскажите пожалуйста советом или ссылкой буду крайне признателен!!!


"ftp login"
Отправлено Maxim Kuznetsov , 17-Мрт-05 13:52 
>Всем большое спасибо.. сейчас уже много работает, но есть проблемма до решения
>которой я никак не могу додуматься...Проблема такая : нужно получить список
>ВСЕХ файлов и директорий с ftp сервера. Как это начал раелизовывать
>я и на чём остановился: 1 получаю список файлов и с
>помошью функции sscanf() понимаю что первый файл являеться директорией или обычным
>файлом (drwxrwxrwx) а из конца беру имя этого файли и если
>эта директория то говорю cwd "%s" dirname таким образом я дохожу
>до того момента когда директории заончаться (опято же я простоматриваю только
>первую директорию в первой директории и т.д. ну а это меня
>не устраивает так как нужно получить полный список файлов) подскажите пожалуйста
>советом или ссылкой буду крайне признателен!!!
Обычный рекурсивный обход дерева - что тут такого ?
(типа псевдокод)
получаем список файлов текущего каталога,
для каждого файла
  если это симлинк на каталог, то в первом варианте игнорируем
  если это каталог - cd в него, рекурсивный вызов
  если обычный файл - добавляем в полный список
(все - получен список всех файлов)
собственно остается решить что делать с символическими ссылками, для избежания зацикливания и + возможно физически огранить глубину рекурсии,
по тем же соображениям.

"ftp login"
Отправлено glisy , 17-Мрт-05 16:47 
>Обычный рекурсивный обход дерева - что тут такого ?
>(типа псевдокод)
>получаем список файлов текущего каталога,
>для каждого файла
>  если это симлинк на каталог, то в первом варианте игнорируем
>
>  если это каталог - cd в него, рекурсивный вызов
>  если обычный файл - добавляем в полный список
>(все - получен список всех файлов)
>собственно остается решить что делать с символическими ссылками, для избежания зацикливания и
>+ возможно физически огранить глубину рекурсии,
>по тем же соображениям.

Дело в том что это достаточно непросто в реализации из за того что
1 как можно наверное понять из моих вопросов я только недавно начал всерьез заниматься программированием
2 Если представить работу программы что мы видим: получаем список файлов берём первый и проверяем директория это или нет. Если да то говорим cwd <имя директории> и попадаем в неё. В ней тоже огромное количество директорий из которых я выбираю первыую и вхожу туда. Как предлагаеться действовать когда дойдем до того момента когда директории закончаться? Или я принципиально чего то не понимаю и ошибка в самом методе???


"ftp login"
Отправлено MaximKuznetsov , 17-Мрт-05 19:45 
потренеруйтесь на локальной файловой системе ;-)
( если память не изменяет, то в info про opendir есть пример с рекурсивным обходом)
почитайте книжек, посмотрите что такое рекурсия..
Рано видимо Вы деретесь за работу с удалёнными системами :(