Для примера есть ссылка www.jose.it-berater.org/gdiplus/reference/aboutgdiplus.htm если посмотреть через сниффер то когда браузер активирует ссылку проходит пакет запроса Протокол - TCP Удалённый порт - 80 Служба - http Протокол пакета состоит из двух элементов это стартовая строка и заголовки Код (ASM): GET /gdiplus/reference/aboutgdiplus.htm HTTP/1.1 Host: www.jose.it-berater.org Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2950.1 Iron Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 В ответ сервер присылает протокол из трёх элементов это стартовая строка заголовки и тело сообщения в этом теле сообщения прописан HTML код запрашиваемой страницы Всю работу по обмену пакетами под капотом выполняет браузер А как эту же работу сделать при помощи кода Например программа минимум: как правильно отправить запрос и получить в ответ HTML код Первое что нужно сделать как мне кажется это в глобальном сегменте создать текстовый буфер запроса серверу и если я не ошибаюсь в конце нужно добавить лишний пустой переход строки Код (ASM): .data szGet\ db "GET /gdiplus/reference/structures/bitmapdata.htm HTTP/1.1",13,10 db "Host: www.jose.it-berater.org",13,10 db "Connection: keep-alive",13,10 db "Upgrade-Insecure-Requests: 1",13,10 db "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2950.1 Iron Safari/537.36",13,10 db "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",13,10 db "Accept-Encoding: gzip, deflate, sdch",13,10 db "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4",13,10 db 13,10,0 .code Объявить стуктуру - WSADATA и провести инициализацию библиотеки Код (ASM): .data? wsd WSADATA <> .code invoke WSAStartup,0202h,addr wsd Создать сокет Код (ASM): .data sock dword 0 .code invoke socket,AF_INET,SOCK_STREAM,0 mov sock,eax Обьявить структуру - sockaddr_in и заполнить её Код (ASM): .data? saddr sockaddr_in <> .code mov saddr.sin_family,AF_INET mov saddr.sin_port,80 mov saddr.sin_addr,??????????? mov saddr.sin_zero,0 во второй параметр структуры поставил число - 80 но честно говоря не знаю правильно ли я сделал третий параметр структуры вообще не знаю как и чем заполнить потом вродебы должны идти функции Код (ASM): invoke bind,sock,addr saddr,sizeof saddr invoke connect,sock,addr saddr,sizeof saddr В конце я так полагаю отправка данных по сокету Код (ASM): invoke lstrlenA,addr szGet invoke send,sock,addr szGet,eax,0 Кто в теме подскажите пожалуйста как синтаксически правильно заполнить стуктуру - sockaddr_in и послать запрос по этому адресу www.jose.it-berater.org/gdiplus/reference/aboutgdiplus.htm чтобы сервер нам прислал ответ а как обработать ответ это уже программа максимум
Если протокол TCP , то почему не указан надо так Код (ASM): invoke socket,AF_INET,SOCK_STREAM,IPPROTO_TCP можно конечно указать 0, и подсистема сама выберет - но лучше делать четко. далее вначале очищаем saddr. Или заранее заполняем ее нулями, например так Код (ASM): saddr db sizeof(sockaddr_in) dup (0) далее, порт вы не правильно сделали, надо так: Код (ASM): invoke htons,80 mov saddr.sin_port, ax далее заполняем Код (ASM): mov saddr.sin_family,AF_INET далее вам надо получить адрес, для этого используется функция gethostbyname Результирующая структура hostent содержит нужную инфу, которую нужно поместить в поле sin_addr Код (ASM): invoke gethostbyname,offset host_name or eax,eax jz _err assume eax:ptr hostent mov ebx,[eax].h_list mov ebx,[ebx] mov ebx,[ebx] mov saddr.sin_addr,ebx если по IP то нужно использовать gethostbyaddr Ну и конечно не надо биндить (bind) порт. Вы же клиент делаете, а не сервер