FTP with CERN-Based Proxy Using WinInet API

Тема в разделе "WASM.NETWORKS", создана пользователем vg, 3 мар 2009.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Как в этом случае передать имя пользователя и пароль, чтобы авторизоваться?
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    ftp://user:pass@server

    http://support.microsoft.com/kb/216214
     
  3. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Начал пробывать, так у меня и без пароля не хочет работать.
    Делаю так
    Код (Text):
    1.     CHAR strURL[]="ftp://ftp.microsoft.com/";
    2.  
    3.     HINTERNET hInternet = InternetOpen(_T("foo"), INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
    4.    
    5.     if(hInternet == NULL)
    6.     {
    7.         AfxMessageBox(_T("Не удалось начать сеанс"), MB_OK);
    8.         return 0;
    9.     }
    10.    
    11.     HINTERNET hInternetFile = InternetOpenUrl(hInternet, (LPCTSTR)strURL, NULL, 0, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, 0);
    12.  
    13.     if (hInternetFile == NULL)
    14.     {
    15.         MessageBox(0, _T("InternetOpenUrl error"), _T("InternetOpenUrl error"),MB_OK);
    16.         return 0;
    17.     }
    Постоянно выдаёт "InternetOpenUrl error". Пробывал INTERNET_OPEN_TYPE_PROXY с lpszProxyName="ip-моего прокси" - результат тот же.
    БЛИН! Задолбала меня эта тема, уже больше месяца мучаюсь, переспросил не один форум и ничего.
    Как правильно подключиться к FTP через прокси?
     
  4. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
  5. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Не понимаю.
    Пример работает.
    Мои вызовы InternetOpen и InternetOpenUrl отличались только отсутствием флага INTERNET_FLAG_KEEP_CONNECTION.
    Добавил
    Код (Text):
    1. int FTP_CERN()
    2. {
    3.     CHAR strURL[]="ftp://ftp.microsoft.com.";
    4.  
    5.     HINTERNET hInternet = InternetOpen(_T("foo"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION);
    6.    
    7.     if(!hInternet)
    8.     {
    9.         AfxMessageBox(_T("Не удалось начать сеанс"), MB_OK);
    10.         return 0;
    11.     }
    12.    
    13.     HINTERNET hConnect = InternetOpenUrl(hInternet, (LPCTSTR)strURL, NULL, 0, INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_RELOAD, 0);
    14.  
    15.     if (!hConnect)
    16.     {
    17.         MessageBox(0, _T("InternetOpenUrl error"), _T("InternetOpenUrl error"),MB_OK);
    18.         return 0;
    19.     }
    20.  
    21.     return 1;
    22. }
    Всё равно, не работает. Та же ошибка.
    Что не так? Может дело в том, что у меня MFC-проект?
    ???
     
  6. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Ну, во первых стоит точка. Во вторых у меня не открывается сей ftp, попробуй ftp.idsoftware.com.
     
  7. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Ой, точку я по ошибке поставил при переносе кода на форум (при англ. раскладке это /), в моём коде стояло "/".
    На счёт ftp://ftp.microsoft.com/ не знаю, проверял на нескольких компах, открывается.
    А вот ftp://ftp.idsoftware.com/
    ?
     
  8. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Скорее всего это начало общения с ftp-сервером.
    http://www.faqs.org/rfcs/rfc959.html
     
  9. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Сообщение
    выдаёт Opera. А мой код по прежнему всё то же.
     
  10. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    vg
    Совпадение. Когда писал сообщение #6, сервер работал.

    Вставь GetLastError() и посмотри какая ошибка(или в OllyDbg протрассируй).
     
  11. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    GetLastError()
     
  12. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Разобрался. Дело было в кодировке. Так работает
    Код (Text):
    1.     TCHAR  msg[1024];
    2.  
    3.     HINTERNET hInternet = InternetOpen(_T("foo"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION);
    4.    
    5.     if(!hInternet)
    6.     {
    7.         AfxMessageBox(_T("Не удалось начать сеанс"), MB_OK);
    8.         return;
    9.     }
    10.    
    11.     HINTERNET hConnect = InternetOpenUrl(hInternet, _T("ftp://ftp.microsoft.com/"), NULL, 0, INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_RELOAD, 0);
    12.  
    13.     if (!hConnect)
    14.     {
    15.         wsprintf(msg, _T("%d"), GetLastError());
    16.        
    17.         MessageBox(0, msg, _T("InternetOpenUrl error"),MB_OK);
    18.         return;
    19.     }
    Но возникла другая проблема. InternetOpenUrl всегда выполняется успешно, т. к. прокси что-нибудь возвращает в любом случае (FTP сервер вернул ошибку:
    530 Login incorrect...; Невозможно соединиться с удаленным сервером (ошибка 11001)
    Этот хост неизвестен....). Это можно видеть, обращаясь к тем же адресам через браузер.
    Как мне определить, что вернул целевой сервер?
     
  13. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    он же вернул код ошибки 530
     
  14. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Насколько я понял, это код ошибки назначенный самим прокси (в моём случае UserGate). А, если попадётся другой прокси? Или я не прав?
    К тому же, в списке System Error Codes нет кода 530 и в HTTP такого кода, насколько я знаю, тоже нет. Хотя 11001 есть... Не понимаю.
     
  15. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    530 - Код ошибки от фтп сервера http://www.google.ru/search?hl=ru&q=%D0%BA%D0%BE%D0%B4%D1%8B+%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA+ftp&lr=&aq=4&oq=
     
  16. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    Почитай чтонибудь по FTP протоколу http://www.google.ru/search?hl=ru&newwindow=1&q=ftp+%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB&lr=&aq=f&oq=
     
  17. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    Возможно тебе поможет INTERNET_FLAG_PASSIVE и знание пароля на доступ к серверу ну или ананимус:hacker@mail.ru
     
  18. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Как определить код ошибки полученой от FTP сервера?
     
  19. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    C:\>telnet ftp.microsoft.com 21 [жмём ввод]
    220 Microsoft FTP Service [это то что нам ответил сервер]
    LIST[жмём ввод]
    530 Please login with USER and PASS [это то что нам ответил сервер, 530 это и есть код ошибки, тоесть берём возвёрнутую строку и если она начинается с числа то это число и есть код ошибки. За подробностью отошлю к изучению мануалов по ftp]
    QUIT [жмём ввод]
     
  20. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    220 - тоже код ошибки