Помогите определить размер поля DST.ADDR (по протоколу SOCKS). Исходя из РФС СОКС5 получаю следующую структ-у: Код (Text): +----+-----+-------+------+----------+----------+ |VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT | +----+-----+-------+------+----------+----------+ | 1 | 1 | X'00' | 1 | Variable | 2 | +----+-----+-------+------+----------+----------+ Подскажите как корректно определить размер поля DST.ADDR для получения удаленного адреса и для получения смещения для DST.PORT. Спасибо! П.С. Желательно привести код на Си, если это возможно.
bogrus сенкс! но в силу того что я особо не силен в асме, прошу дзенствующих перевести нижеуказанный код на СИ: Код (Text): mov al, IOBuffer[4] ; get size of Host name lea esi, IOBuffer[5] lea edi, szHost movzx ecx, al cld rep movsb sub al, al stosb lodsw ; get DST.PORT (destination port) mov Dst_Port, ax invoke gethostbyname, addr szHost .if eax!=0 mov eax, [eax+0ch] mov eax, [eax] ; EAX->begin the list of addresses mov eax, [eax] ; get first IP address from list mov Dst_IP, eax .endif Заранее багодарен!!
А я в С не силен, короче так: если у тебя ATYP_DNS то в первом байте поля DST.ADDR содержится длина IP, делаишь типа a = HeapAlloc(IOBuffer[4]+1) или в стеке выделяешь буфер, потом туда надо скопировать это кол-во байт из IOBuffer[5] и записать завершающий ноль, после IP идет слово(2 байта)DST.PORT, так чтоли Код (Text): WORD Dst_Port, int a; for(int i=0;i<IOBuffer[4];i++) { a[i] = IOBuffer[5+i]; } a[i+1]=0; gethostbyname(*a); // *- ну типа offset Dst_Port=IOBuffer[5+IOBuffer[4]]; // х.з.