Сейчас на форуме: hgdagon (+5 невидимых) |
![]() |
eXeL@B —› Программирование —› FTP протокол (рекурсивная загрузка файлов на сервер) |
Посл.ответ | Сообщение |
|
Создано: 13 августа 2007 11:13 · Личное сообщение · #1 Пишу мини-фтп клиент(возможностей по минимуму в связи с тем что нормальных клиентов туевы хучи, а тут дело особое - поэтому и пишу). Не могу понять смысл рекурсивной загрузки файлов на сервак: дома я поставил FileZilla server и на нём тестил - всё отлично загружалось на мой сервер(тоесть вся иерархия директорий сохранялась, и их содержимое соответственно) айпишник которого я указывал как 127.0.0.1. При тесте своей тульзы в локалке произошли ошибки (( Моя утиль нормально коннектилась к серверу(там тоже стояла FileZilla) но вот при загрузке файлов на сервер я аж прозрел - директории создавались нормально, а вот файлы туда не заливались, что делать - хз. Реализовую свою утиль на WinAPI(wininet). Ещё я испытал неудобство с апи: FtpSetCurrentDirectory и FtpGetCurrentDirectory. При их вызове я получаю ошибку(false), хотя директория меняется(выходит что true:s14 ![]() И ещё я испытал затрудения с загрузкой файлов на сервер - когда рекурсивно происходит загрузочка, то может случится так, что файл не будет выбран(один или два, не больше) и не зальётся соответственно. Я впаял тогда перед заливкой вызов паузы(Sleep(5)) и проблема вроде как ушла, не могу понять с чем это связано - может мой фтп сервак не успевал обрабатывать файлы? В аттаче сорсы(проэкт на Dev-cpp, но можно с лёгкостью его перебить на Visual Studio) ![]() ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 13 августа 2007 19:01 · Личное сообщение · #2 у меня вообще почему то такой код: FtpPutFile(hConnect, buffer, fdata.cFileName, FTP_TRANSFER_TYPE_BINARY, NULL); возвращает ошибку ERROR_SXS_ASSEMBLY_NOT_FOUND (00002EE3) несмотря, однако, на то что сервер все же получает комманды: [2007-08-13 - 19:00:56] - [76] KEYWORD: TYPE -- PARAMS: I [2007-08-13 - 19:00:56] - [76] KEYWORD: PASV -- PARAMS: [2007-08-13 - 19:00:56] - [76] KEYWORD: STOR -- PARAMS: D:\projects\1111111\release\suko\socks.log непонимаю ничерта ![]() |
|
Создано: 14 августа 2007 11:35 · Личное сообщение · #3 Блин ерунда какая-то, вот этот кодес не пашет ![]() #include <windows.h> #include <wininet.h> HINTERNET ses; HINTERNET hconnect; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { ses=InternetOpen("ftpX v.0.0.0.1",INTERNET_OPEN_TYPE_PRECONFIG,0,0,INTERNET_FLAG_ASYNC); if(!ses) { MessageBox(0,"Some error on InternetOpen [step 1]","ERROR",MB_ICONERROR); } else { hconnect=InternetConnect(ses,"192.168.61.164",INTERNET_DEFAULT_FTP_P ORT,"tobo-robot","toborobot",INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIV E,0); if(!hconnect) { MessageBox(0,"Some error on InternetConnect [step 2]","ERROR",MB_ICONERROR); } else { if(!FtpPutFile(hconnect,"E:\d2k2_crackmes\_d2k2_crkme01\d2k2_crackme01 .exe","d2k2_crackme01.exe",FTP_TRANSFER_TYPE_BINARY,0)) { MessageBox(0,"Some error on FtpPutFile [step 3]","ERROR",MB_ICONERROR); return 0; } } } return 1; } ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 14 августа 2007 19:13 · Личное сообщение · #4 HandMill пишет: if(!FtpPutFile(hconnect,"E:\d2k2_crackmes\_d2k2_crkme01\d2k2_crackme01 .exe","d2k2_crackme01.exe",FTP_TRANSFER_TYPE_BINARY,0)) Поправь back slashes ![]() Ну а по поводу главного вопроса, под cygwin-ом есть ncftp, ncftpget, ncftpput. Ну а по поводу отладки - воткни printf/cout во все операции с путями и именами - где-то косяк, и ты его увидишь в логе. ![]() |
|
Создано: 14 августа 2007 19:22 · Личное сообщение · #5 |
|
Создано: 15 августа 2007 12:52 · Личное сообщение · #6 С back slash'ами у меня в сорсе всё в порядке (см. аттач). s0larian пишет: и вот ещё косяк - убери INTERNET_FLAG_ASYNC флаг убирал - не помогло(менял на 0). Также ещё пробовал менять на INTERNET_FLAG_FROM_CACHE и INTERNET_FLAG_OFFLINE ![]() ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 15 августа 2007 19:54 · Поправил: s0larian · Личное сообщение · #7 |
|
Создано: 15 августа 2007 19:56 · Личное сообщение · #8 |
|
Создано: 15 августа 2007 20:03 · Поправил: s0larian · Личное сообщение · #9 HandMill пишет: "под cygwin-ом есть ncftp, ncftpget, ncftpput" а можно тут попдробнее - с примером там каким-нить... а то в MSDN нет ничего про ncftp, ncftpget и ncftpput (( ![]() В списке будет прога "ncftp" у которой милион параметров. C ней в комплекте идут ещё две проги для put и get:
![]() |
|
Создано: 16 августа 2007 12:11 · Личное сообщение · #10 Неа, чё-то твой код тоже не работает. Ты его как и я тестил на локальном ФТП-сервере. s0larian пишет: твоя беда с настройкой сервера - либо account кривой либо права к каталогам Аккаунт - точно не кривой, иначе бы я имел ошибку "Some error on InternetConnect [step 2]". И с правами к каталогам всё нормально, ведь я могу же через любой фтп-клиент коннектиться к указанному серверу, создавать там каталоги и заливать туда файлы. И файл "E:\d2k2_crackmes\_d2k2_crkme01\d2k2_crackme01.exe","d2k2_crackme01.ex e" у меня на жёстком диске тоже существует. HandMill пишет: дома я поставил FileZilla server и на нём тестил - всё отлично загружалось на мой сервер я тоже умею к localhost коннектицца и лить туда нормально(!) файлы - у меня программа то дома работала отлично. Спасибо за INTERNET_FLAG_ASYNC - заменяю его теперь на 0 и уже функция FtpSetCurrentDirectory возвращает true. Осталось разобраться с FtpPutFile. ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 16 августа 2007 19:14 · Поправил: s0larian · Личное сообщение · #11 HandMill, я вижу только два правдоподобных варианта: а) на сервере что-то криво с путями/каталогами/правами. Например default dir не стоит, или тебе надо зайти в под-каталог. (я заливал файлик как incoming/main.c) б) локальный путь кривой - попробуй без пути, например. То есть из запусти прогу и заливай из текущего каталога. Ну, что ещё... код рабочий, думаю что-то у тебя с правами/путями. О, кста, проверь что ты не unicode компилишь, а то все строковые константы надо оборачивать в _T("this is an ANSI string"). Ну и скомпиль напрямую используя CL. (компилер можешь слить с microsoft.com) ![]() |
|
Создано: 18 августа 2007 13:45 · Личное сообщение · #12 s0larian Большое спасибо! Вроде всё получилось .... нужно будет мне ещё это дело потестить. В аттаче работающий проект для загрузки файла на сервер по фтп на Dev-Cpp. ![]() ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 20 августа 2007 19:54 · Личное сообщение · #13 |
|
Создано: 20 августа 2007 22:52 · Личное сообщение · #14 s0larian косяк был во флагах. Я наконец-то с помощью твоего кода научился заливать файлы к себе на handmill.jino-net.ru по ftp://FTP. Но, на работе у меня так и не получилось залить файлы на сервер, где косяк - хз ![]() ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 21 августа 2007 01:38 · Личное сообщение · #15 |
![]() |
eXeL@B —› Программирование —› FTP протокол (рекурсивная загрузка файлов на сервер) |