UDP_ASSOCIATE

Тема в разделе "WASM.NETWORKS", создана пользователем Black0x88, 26 янв 2007.

  1. Black0x88

    Black0x88 New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2007
    Сообщения:
    2
    Добрый день.
    Мне нужно слать датаграммы через сокс сервер.
    Вопрос №1.
    Делаю как в RFC 1928, т.е. устанавливаю конект по TCP шлю:
    Код (Text):
    1.     buffer[0] = 5;  // Ver
    2.     buffer[1] = 1;  // 1 method
    3.     buffer[2] = 0;  // no auth
    Ответ приходит 5 и 0, тоесть все нормально. Второй раз шлю:
    Код (Text):
    1.     buffer[0] = 5;  // Ver
    2.     buffer[1] = 3;  // udp_associate
    3.     buffer[2] = 0;  // Reserved
    4.     buffer[3] = 1;  // IPv4
    5.     *((unsigned long*)(buffer + 4)) = inet_addr("217.185.139.100");
    6.     *((unsigned long*)(buffer + 8)) = htons(8889);
    Сервер возвращает REP равный 8, т.е. "тип адреса не поддерживается".
    А если заменить на
    Код (Text):
    1.     *((unsigned long*)(buffer + 4)) = inet_addr("0.0.0.0");
    2.     *((unsigned long*)(buffer + 8)) = htons(0);
    то ошибок нет. В чем может быть проблема?
    Вопрос №2.
    Сами датаграммы шлю таким образом:
    Код (Text):
    1.     udp_struct.rsv = 0;
    2.     udp_struct.frag = 0;
    3.     udp_struct.atyp = 1;
    4.     udp_struct.addr= inet_addr("217.185.139.100");//удаленный сервер
    5.     udp_struct.port= htons(8889);//порт на удаленном сервере
    6.  
    7.     memcpy((void*)&udp_struct.data, ch_buffer, buffer_size);//копирую данные для отправки
    8.     send(sock, (char*)&udp_struct, sizeof(udp_struct), 0);
    Вот прототип используемой структуры
    Код (Text):
    1. struct SOCKS5_UDP_HDR
    2. {
    3.     UINT16 rsv;
    4.     UINT8 frag;
    5.     UINT8 atyp;
    6.     UINT32 addr;
    7.     UINT16 port;
    8.     char data[1024];
    9. };
    Так вот датаграммы не доходят до пункта назначения. Клиент сто процентов готов принимать данные.В чем тут может быть ошибка??
    Зараннее благодарен :)