Вот кусок кода на MASM
Суть в том, чтобы получить в буфер весь HTML код страницы.
Размер буфера выделен с лихвой, но загрузка происходит всегда не полностью - размер выходного файла каждый раз разный и всегда кратен MTU. В чем может быть загвоздка?
Суть в том, чтобы получить в буфер весь HTML код страницы.
Размер буфера выделен с лихвой, но загрузка происходит всегда не полностью - размер выходного файла каждый раз разный и всегда кратен MTU. В чем может быть загвоздка?
Код:
.486
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\ws2_32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\ws2_32.lib
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib
.data
szHostName db "www.wasm.ru",0
FileszHeaders db "POST /index.php HTTP/1.1",13,10
db "Host: www.wasm.ru",13,10
db "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)",13,10
db "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",13,10
db "Accept-Language: en-us,en;q=0.7,de-de;q=0.3",13,10
db "Accept-Charset: windows-1250,utf-8;q=0.7,*;q=0.7",13,10
db "Keep-Alive: 115",13,10
db "Connection: keep-alive",13,10
db "Cookie:%s",13,10
db "Content-Type: application/x-www-form-urlencoded",13,10
db "Referer: http://www.wasm.ru/forum",13,10
db "Content-Length: 16",13,10,13,10
db "form_sent=1",0
outputFileName db 'file.htm', 0
.data?
hFile dd ?
writed dd ?
url_file_string db 512 dup (?)
f_startpos dd ?
f_endpos dd ?
f_lenstr dd ?
startpos dd ?
endpos dd ?
lenstr dd ?
podstroka3 db 255 dup (?)
Ans_Buff db 100000 dup (?)
Ans_Buff2 db 100000 dup (?)
;Ans_Buff2 dd ?
Req_Buff db 1048 dup (?)
Req_Buff2 db 1048 dup (?)
cookies_str db 7500 dup (?)
mHandle dd ?
sizetoread dd ?
.code
;========================================================================
filelink_Get_con proc
LOCAL WSAData : WSADATA
LOCAL saServer : sockaddr_in
LOCAL pSocket : DWORD
LOCAL dwLen : DWORD
; Init WSA
invoke WSAStartup, 101h, addr WSAData
test eax, eax
jnz die
; Convert if IP
invoke inet_addr, addr szHostName
cmp eax, INADDR_NONE
jne ok
; Resolve if host
invoke gethostbyname, addr szHostName
test eax, eax
jz die
mov eax, [eax+0Ch]
mov eax, [eax]
mov eax, [eax]
ok:
; Fill struct
mov saServer.sin_addr, eax
invoke htons, 80d
mov saServer.sin_port, ax
mov saServer.sin_family, AF_INET
; Создаем socket
invoke socket, AF_INET, SOCK_STREAM, 0
test eax, eax
js die
mov pSocket, eax
; Пробуем подсоедениться
invoke connect, pSocket, addr saServer, sizeof saServer
test eax, eax
jnz die
; Создаем запрос серверу
invoke wsprintf, addr Req_Buff2, addr FileszHeaders, addr cookies_str
; отправляем запрос
invoke send, pSocket, addr Req_Buff2, eax, 0
test eax, eax
js die
jz die
; получаем ответ
invoke recv, pSocket, addr Ans_Buff2, sizeof Ans_Buff2, 0
test eax, eax
js die
jz die
push eax
invoke closesocket, pSocket
invoke WSACleanup
ret
die:
invoke WSACleanup
invoke ExitProcess, 0
filelink_Get_con endp
;========================================================================
;========================================================================
Main proc
call filelink_Get_con
invoke CreateFile, addr outputFileName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
mov hFile,eax
invoke lstrlen, addr Ans_Buff2
invoke WriteFile, hFile, addr Ans_Buff2, eax, addr writed, 0
invoke CloseHandle, hFile
invoke MessageBox,0, addr Ans_Buff2, 0, MB_OK
invoke ExitProcess, 0
Main endp
end Main