Определение DST.ADDR по протоколу SOCKS5

Тема в разделе "WASM.A&O", создана пользователем ZeroMemory, 1 май 2005.

  1. ZeroMemory

    ZeroMemory New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    79
    Помогите определить размер поля DST.ADDR (по протоколу SOCKS). Исходя из РФС СОКС5 получаю следующую структ-у:


    Код (Text):
    1.  
    2. +----+-----+-------+------+----------+----------+
    3. |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |
    4. +----+-----+-------+------+----------+----------+
    5. | 1  |  1  | X'00' |  1   | Variable |    2     |
    6. +----+-----+-------+------+----------+----------+
    7.  




    Подскажите как корректно определить размер поля DST.ADDR для получения удаленного адреса и для получения смещения для DST.PORT.



    Спасибо!



    П.С. Желательно привести код на Си, если это возможно.
     
  2. ZeroMemory

    ZeroMemory New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    79
    Господа, неужели никто не знает как реализовать сабж ?
     
  3. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
  4. ZeroMemory

    ZeroMemory New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    79
    bogrus сенкс!

    но в силу того что я особо не силен в асме, прошу дзенствующих перевести нижеуказанный код на СИ:
    Код (Text):
    1.  
    2.                           mov        al, IOBuffer[4]      ; get size of Host name
    3.                           lea        esi, IOBuffer[5]
    4.                           lea        edi, szHost
    5.                           movzx      ecx, al
    6.                           cld
    7.                           rep        movsb
    8.                           sub        al, al
    9.                           stosb
    10.                           lodsw                           ; get DST.PORT (destination port)
    11.                           mov        Dst_Port, ax
    12.                           invoke     gethostbyname, addr szHost
    13.                           .if        eax!=0
    14.                           mov        eax, [eax+0ch]      
    15.                           mov        eax, [eax]           ; EAX->begin the list of addresses
    16.                           mov        eax, [eax]           ; get first IP address from list
    17.                           mov        Dst_IP, eax
    18.                          .endif    
    19.  




    Заранее багодарен!!
     
  5. ZeroMemory

    ZeroMemory New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    79
    где IOBuffer, скажем BYTE* IOBuffer.
     
  6. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    А я в С не силен, короче так: если у тебя ATYP_DNS то в первом байте поля DST.ADDR содержится длина IP, делаишь типа a = HeapAlloc(IOBuffer[4]+1) или в стеке выделяешь буфер, потом туда надо скопировать это кол-во байт из IOBuffer[5] и записать завершающий ноль, после IP идет слово(2 байта)DST.PORT, так чтоли :)
    Код (Text):
    1.   WORD Dst_Port, int a;
    2. for(int i=0;i<IOBuffer[4];i++)
    3. {
    4.   a[i] = IOBuffer[5+i];
    5. }
    6.   a[i+1]=0;
    7.   gethostbyname(*a); // *- ну типа offset
    8.   Dst_Port=IOBuffer[5+IOBuffer[4]]; // х.з.