Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FTP client & proxy проблема 
:(
    Опции темы
AHTOXA
Дата 4.1.2006, 17:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет всем. В proxy и ftp я не специалист. Написал ftp клиента. Необходимо:
1) заставить работать его через proxy
2) заставить работать его через proxy, если proxy прозрачен для данного порта.

Как это сделать?
  Вверх
Aleksandor
Дата 4.1.2006, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: нет
Всего: 12



Мне кажется если прокси прозрачный то ничего делать не надо, на то он и прозрачный smile
Кстати а какого типа прокси? Через HTTP он все равно работать вряд ли будет, если SOCKS тогда другое дело.


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
DeadSoul
Дата 4.1.2006, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: нет
Всего: 11



AHTOXA, код публикуй. Если твой код использует MFC, то прижется забить на MFC. MFC через проксю с паролем непробъетсся


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Aleksandor
Дата 5.1.2006, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: нет
Всего: 12



Попробуй юзать функции WinInet


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
AHTOXA
Дата 5.1.2006, 12:40 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











MFC не использую. Только родные WINDOWS библиотеки + свои надстройки над этими библиотеками, для коннекта использую сокеты.
Для прозрачного proxy такая проблема:

например есть прокси сервер 0.0.0.1, ftp сервер - 0.0.0.2 и адрес моей машины 0.0.0.0
Control connection на 0.0.0.2 проходит без проблем. Теперь разберемся с Data connection:
я делаю bind(0.0.0.0), затем отсылаю команду "PORT 0,0,0,0,p1,p2" - но это адрес внутри сети, и 0.0.0.2 не сможет законектиться по этому адресу. Для встроенного в far FTP клиента проходит команда - PORT 0,0,0,1,p1,p2 при создании Data connection. Я пробовал сделать bind для 0.0.0.1 - но не проходит.
  Вверх
AHTOXA
Дата 5.1.2006, 12:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

int SLAPI FTP::Connect(FTPAccount * pAccount)
{
    int ok = 1;
    char buf[256];
    SString reply;
    InetAddr addr;

    THROW_PP(pAccount, PPERR_INVPARAM);
    Account = *pAccount;
    addr.Set(Account.Host, Account.Port);
    THROW_MEM(P_ControlConn = new TcpSocket(Account.Timeout, 1));
    THROW_PP(P_ControlConn->Connect(addr), PPERR_SLIB);
    THROW(GetReply(reply));
    THROW(CheckReply(reply));
    THROW(SendCmd(FTPCMD_USER, (long)Account.User));
    THROW(SendCmd(FTPCMD_PASS, (long)Account.Password));
    CATCH
        ok = (Disconnect(), 0);
    ENDCATCH
    return ok;
}

int SLAPI FTP::FileTransfer(const char * pLocalPath, const char * pServerPath, int send)
{
    int ok = 1;
    const char * p_type = "I";
    char name[256];
    char drv[MAXDRIVE], dir[MAXDIR], fname[MAXFILE + MAXEXT], ext[MAXEXT];
    DWORD namelen = sizeof(name);
    FILE * p_file = 0;
    SString str_addr;
    InetAddr addr;
    TcpSocket ftp_conn(Account.Timeout, 1);
    
    fnsplit(pServerPath, drv, dir, fname, ext);
    strcat(strcat(fname, "."), ext);
    if(dir[0] != '\0')
        THROW(CD(dir));

    //addr.Set(ADDR_ANY);
    GetComputerName(name, &namelen);
    addr.Set(name, 0);
    THROW_PP(ftp_conn.Bind(addr), PPERR_SLIB);
    THROW_PP(ftp_conn.GetSockName(&addr), PPERR_SLIB);

    addr.ToStr(InetAddr::fmtAddr, str_addr);
    str_addr.ReplaceChar('.', ',');
    str_addr.Cat(",");
    str_addr.Cat((long)(addr.GetPort() & 0x00ff));
    str_addr.Cat(",");
    str_addr.Cat((long)((addr.GetPort() >> 8) & 0x00ff));

    SendCmd(FTPCMD_TYPE, (long)p_type);
    SendCmd(FTPCMD_PORT, (long)(const char*)str_addr);
    if(send)
        SendCmd(FTPCMD_STOR, (long)fname);
    else
        SendCmd(FTPCMD_RETR, (long)fname);
    THROW_PP(ftp_conn.Listen(), PPERR_SLIB);
    if(ftp_conn.Select(TcpSocket::mRead)) {
        InetAddr cli_addr;
        TcpSocket cli_sock;
        if(ftp_conn.Accept(&cli_sock, &cli_addr)) {
            char buf[512];
            size_t len = 0;
            SLibError = SLERR_OPENFAULT;
            PPSetAddedMsgString(pLocalPath);
            if(send) {
                THROW_PP((p_file = fopen(pLocalPath, "rb")) != NULL, PPERR_SLIB);
                while((len = fread(buf, 1, sizeof(buf), p_file)))
                    THROW(cli_sock.Send(buf, len, 0));
            }
            else {
                THROW_PP((p_file = fopen(pLocalPath, "wb")) != NULL, PPERR_SLIB);
                while(cli_sock.Recv(buf, sizeof(buf), &len) > 0 && len != 0)
                    fwrite(buf, 1, len, p_file);
            }
            cli_sock.Disconnect();
        }
    }
    CATCH
        ok = 0;
    ENDCATCH
    if(p_file)
        fclose(p_file);
    return ok;
}


  Вверх
Aleksandor
Дата 5.1.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: нет
Всего: 12



а пробовал bind к INADDR_ANY ??


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
AHTOXA
Дата 5.1.2006, 15:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Пробовал ADDR_ANY, судя по #define ADDR_ANY INADDR_ANY (WinSock2.h)
это одно и тоже - та же редиска smile (в данном случае непонятно какой адрес отправлять командой PORT)
  Вверх
Aleksandor
Дата 5.1.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: нет
Всего: 12



Короче надо разбираться smile А что адреса такие 0.0.0.0 "this" network? Может другой диапазон попробовать, ну 192.168.1.0 например...
Вот здесь можно скачать исходники FTP клиента и сервера и еще там много чего полезного http://filezilla-project.org/


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
AHTOXA
Дата 5.1.2006, 16:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Адреса в сети естественно другие, просто для примера привел с нулями smile
  Вверх
AHTOXA
Дата 8.1.2006, 12:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Пришлось таки перейти на использование библиотеки WinInet.dll.
В связи с чем вопрос. Функция FtpFindFirstFile, возвращает дату время не всегда корректную. Иногда бывает что год = текущий год - 1, с чем это связано?
  Вверх
Aleksandor
Дата 8.1.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: нет
Всего: 12



Попробуй поискать в Google GROUPS по фразе "FtpFindFirstFile"
Там много чего интересного. Даже есть группа новостей по программированию в WinInet
называется microsoft.public.inetsdk.programming.wininet


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0699 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.