'GET /publist.php HTTP/1.1',0Dh,0Ah,
'Host: oko.by',0Dh,0Ah,
'User-Agent: Gadzila',0Dh,0Ah,
'Accept: text/html',0Dh,0Ah,
'Connection: close',0Dh,0Ah,0
http запрос
А если я посылаю это:
Код:
то снифер говорит, что я не посылал никакого сообщения а сама прога висит и ждет ответа от сервера, которого само собой не будет и быть не может.
Пажаста разъясните ситуацию.
Вроде вопрос задал правильно, если нет намекните)
Вот исходник проги:
Код:
.486
.model flat,stdcall
option casemap:none
include MyInc.inc
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\wsock32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\wsock32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\gdi32.lib
.data
AppMessadge db 'Client',0
Message db 'GET /publist.php',13,10,0
ErrorConnect db 'Нет соединения',0
ofn OPENFILENAME <>
wsadata WSADATA <>
sin sockaddr_in <>
Buffer1 db 10000 dup(0)
SaveFileAddres db 'D:\ClientSave.txt',0
MySmtp db '77.221.159.154',0
BigMessage db 'Сообщение слишком большое! Смотри в файле D:\ClientSave.txt',0
FilterString db "All Files",0,"*.*",0
db "Text Files",0,"*.txt",0,0
send_text db 'GET /publist.php HTTP/1.1',0Dh,0Ah,
'Host: oko.by',0Dh,0Ah,
'User-Agent: Gadzila',0Dh,0Ah,
'Accept: text/html',0Dh,0Ah,
'Connection: close',0Dh,0Ah,0
.data?
sock dd ?
hFile HANDLE ?
hMemory HANDLE ?
pMemory DWORD ?
SizeReadWrite DWORD ?
.const
MEMSIZE equ 65535
.code
start:
;*******************************************************************************
invoke WSAStartup,101h,addr wsadata
invoke socket,AF_INET,SOCK_STREAM,IPPROTO_IP
mov sock,eax
.if (eax == INVALID_SOCKET)
Invoke MessageBox,0,0,0,MB_OK
jmp exit
.endif
mov sin.sin_family,AF_INET
invoke htons,80
mov sin.sin_port,ax
mov sin.sin_family, AF_INET
invoke inet_addr, addr MySmtp
mov sin.sin_addr, eax
invoke connect, sock, addr sin ,sizeof sin
invoke MySend,addr Message
invoke MyRecv,addr Buffer1
invoke ConsiderSumbol,addr Buffer1
.IF eax < 50
invoke MessageBox,0,addr Buffer1,addr AppMessadge,MB_OK
.ELSE
invoke MessageBox,0,addr BigMessage,addr AppMessadge,MB_OK
.ENDIF
invoke closesocket, sock
invoke WSACleanup
invoke SaveInFile,addr Buffer1
;*******************************************************************************
exit:
invoke ExitProcess,0
MyRecv proc String :DWORD
mov edi,String
.WHILE TRUE
@1:.IF eax == SOCKET_ERROR
invoke MessageBox, NULL, addr ErrorConnect, addr ErrorConnect, MB_OK
invoke connect, sock, addr sin ,sizeof sin
jmp @1
.ENDIF
invoke recv,sock,edi,1,0
.BREAK .IF ( byte ptr [edi] == 00 )
inc edi
.ENDW
ret
MyRecv endp
MySend proc String :DWORD
mov edi,String
.WHILE TRUE
.BREAK .IF ( byte ptr [edi] == 00 )
@1:.IF eax == SOCKET_ERROR
invoke MessageBox, NULL, addr ErrorConnect, addr ErrorConnect, MB_OK
invoke connect, sock, addr sin ,sizeof sin
jmp @1
.ENDIF
invoke send,sock,edi,1,0
inc edi
.ENDW
ret
MySend endp
include MyProc.inc
end start
.model flat,stdcall
option casemap:none
include MyInc.inc
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\wsock32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\wsock32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\gdi32.lib
.data
AppMessadge db 'Client',0
Message db 'GET /publist.php',13,10,0
ErrorConnect db 'Нет соединения',0
ofn OPENFILENAME <>
wsadata WSADATA <>
sin sockaddr_in <>
Buffer1 db 10000 dup(0)
SaveFileAddres db 'D:\ClientSave.txt',0
MySmtp db '77.221.159.154',0
BigMessage db 'Сообщение слишком большое! Смотри в файле D:\ClientSave.txt',0
FilterString db "All Files",0,"*.*",0
db "Text Files",0,"*.txt",0,0
send_text db 'GET /publist.php HTTP/1.1',0Dh,0Ah,
'Host: oko.by',0Dh,0Ah,
'User-Agent: Gadzila',0Dh,0Ah,
'Accept: text/html',0Dh,0Ah,
'Connection: close',0Dh,0Ah,0
.data?
sock dd ?
hFile HANDLE ?
hMemory HANDLE ?
pMemory DWORD ?
SizeReadWrite DWORD ?
.const
MEMSIZE equ 65535
.code
start:
;*******************************************************************************
invoke WSAStartup,101h,addr wsadata
invoke socket,AF_INET,SOCK_STREAM,IPPROTO_IP
mov sock,eax
.if (eax == INVALID_SOCKET)
Invoke MessageBox,0,0,0,MB_OK
jmp exit
.endif
mov sin.sin_family,AF_INET
invoke htons,80
mov sin.sin_port,ax
mov sin.sin_family, AF_INET
invoke inet_addr, addr MySmtp
mov sin.sin_addr, eax
invoke connect, sock, addr sin ,sizeof sin
invoke MySend,addr Message
invoke MyRecv,addr Buffer1
invoke ConsiderSumbol,addr Buffer1
.IF eax < 50
invoke MessageBox,0,addr Buffer1,addr AppMessadge,MB_OK
.ELSE
invoke MessageBox,0,addr BigMessage,addr AppMessadge,MB_OK
.ENDIF
invoke closesocket, sock
invoke WSACleanup
invoke SaveInFile,addr Buffer1
;*******************************************************************************
exit:
invoke ExitProcess,0
MyRecv proc String :DWORD
mov edi,String
.WHILE TRUE
@1:.IF eax == SOCKET_ERROR
invoke MessageBox, NULL, addr ErrorConnect, addr ErrorConnect, MB_OK
invoke connect, sock, addr sin ,sizeof sin
jmp @1
.ENDIF
invoke recv,sock,edi,1,0
.BREAK .IF ( byte ptr [edi] == 00 )
inc edi
.ENDW
ret
MyRecv endp
MySend proc String :DWORD
mov edi,String
.WHILE TRUE
.BREAK .IF ( byte ptr [edi] == 00 )
@1:.IF eax == SOCKET_ERROR
invoke MessageBox, NULL, addr ErrorConnect, addr ErrorConnect, MB_OK
invoke connect, sock, addr sin ,sizeof sin
jmp @1
.ENDIF
invoke send,sock,edi,1,0
inc edi
.ENDW
ret
MySend endp
include MyProc.inc
end start
Да и отвечу на свой вопрос:
Вот этот код:
Код:
invoke gethostbyname,offset Wasm
mov eax,[eax+12] ;эти три строчки - получение ip-адреса из возвращаемой gethostbyname структуры
mov eax,[eax]
mov eax,[eax]
mov sin.sin_addr, eax
mov eax,[eax+12] ;эти три строчки - получение ip-адреса из возвращаемой gethostbyname структуры
mov eax,[eax]
mov eax,[eax]
mov sin.sin_addr, eax
Желательно поместить сразу после:
Код:
invoke WSAStartup,101h,addr wsadata
По моему нужно. Наверно)) Но только после этого начало работать.
Неужели никто на форуме этого не знал:p
Вот как должно было быть:
Код:
.486
.model flat,stdcall
option casemap:none
include MyInc.inc
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\wsock32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\wsock32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\gdi32.lib
.data
AppMessadge db 'Client',0
;###################################################
;отсылая запрос очень важдно послать правильный запрос
;если у вас , что-то не получается то без Снифера вам не обойтись
Message db 'GET /wasm.css HTTP/1.0',13,10,
'Host: www.wasm.ru',13,10,
'Range: bytes=0-',13,10, ;лично я пропустил эту строку
;и иза этого у меня 2 дня болела голова --- будьте внимательны
'User-Agent: Download',13,10,
'Accept-Encoding: text/css,*/*;q=0.1',13,10,
'Connection: close',13,10,
'Accept: text/*,image/*,application/*,*/*',13,10,13,10,0 ;также обратите внимание на эту строку
;в конце обязательно должно быть ;так 13,10,13,10,0 или что тоже самое 0Dh,0Ah,0Dh,0Ah,0
;###################################################
ErrorConnect db 'Нет соединения',0
ofn OPENFILENAME <>
wsadata WSADATA <>
sin sockaddr_in <>
Buffer1 db 10000 dup(0)
SaveFileAddres db 'D:\ClientSave.txt',0
MySmtp db '77.221.159.154',0
Wasm db 'wasm.ru',0
BigMessage db 'Сообщение слишком большое! Смотри в файле D:\ClientSave.txt',0
FilterString db "All Files",0,"*.*",0
db "Text Files",0,"*.txt",0,0
.data?
sock dd ?
hFile HANDLE ?
hMemory HANDLE ?
pMemory DWORD ?
SizeReadWrite DWORD ?
.const
MEMSIZE equ 65535
.code
start:
;*******************************************************************************
invoke WSAStartup,101h,addr wsadata
invoke gethostbyname,offset Wasm
mov eax,[eax+12] ;эти три строчки - получение ip-адреса из возвращаемой gethostbyname структуры
mov eax,[eax]
mov eax,[eax]
mov sin.sin_addr, eax
invoke socket,AF_INET,SOCK_STREAM,IPPROTO_TCP
mov sock,eax
.if (eax == INVALID_SOCKET)
Invoke MessageBox,0,0,0,MB_OK
jmp exit
.endif
mov sin.sin_family,AF_INET
invoke htons,80
mov sin.sin_port,ax
mov sin.sin_family, AF_INET
invoke connect, sock, addr sin ,sizeof sin
invoke MySend,addr Message
invoke MyRecv,addr Buffer1
invoke ConsiderSumbol,addr Buffer1
.IF eax < 50
invoke MessageBox,0,addr Buffer1,addr AppMessadge,MB_OK
.ELSE
invoke MessageBox,0,addr BigMessage,addr AppMessadge,MB_OK
.ENDIF
invoke closesocket, sock
invoke WSACleanup
invoke SaveInFile,addr Buffer1
;*******************************************************************************
exit:
invoke ExitProcess,0
MyRecv proc String :DWORD
mov edi,String
.WHILE TRUE
@1:.IF eax == SOCKET_ERROR
invoke MessageBox, NULL, addr ErrorConnect, addr ErrorConnect, MB_OK
invoke connect, sock, addr sin ,sizeof sin
jmp @1
.ENDIF
invoke recv,sock,edi,1,0
.BREAK .IF ( byte ptr [edi] == 00 )
inc edi
.ENDW
ret
MyRecv endp
MySend proc String :DWORD
mov edi,String
.WHILE TRUE
.BREAK .IF ( byte ptr [edi] == 00 )
@1:.IF eax == SOCKET_ERROR
invoke MessageBox, NULL, addr ErrorConnect, addr ErrorConnect, MB_OK
invoke connect, sock, addr sin ,sizeof sin
jmp @1
.ENDIF
invoke send,sock,edi,1,0
inc edi
.ENDW
ret
MySend endp
include MyProc.inc
end start
.model flat,stdcall
option casemap:none
include MyInc.inc
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\wsock32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\wsock32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\gdi32.lib
.data
AppMessadge db 'Client',0
;###################################################
;отсылая запрос очень важдно послать правильный запрос
;если у вас , что-то не получается то без Снифера вам не обойтись
Message db 'GET /wasm.css HTTP/1.0',13,10,
'Host: www.wasm.ru',13,10,
'Range: bytes=0-',13,10, ;лично я пропустил эту строку
;и иза этого у меня 2 дня болела голова --- будьте внимательны
'User-Agent: Download',13,10,
'Accept-Encoding: text/css,*/*;q=0.1',13,10,
'Connection: close',13,10,
'Accept: text/*,image/*,application/*,*/*',13,10,13,10,0 ;также обратите внимание на эту строку
;в конце обязательно должно быть ;так 13,10,13,10,0 или что тоже самое 0Dh,0Ah,0Dh,0Ah,0
;###################################################
ErrorConnect db 'Нет соединения',0
ofn OPENFILENAME <>
wsadata WSADATA <>
sin sockaddr_in <>
Buffer1 db 10000 dup(0)
SaveFileAddres db 'D:\ClientSave.txt',0
MySmtp db '77.221.159.154',0
Wasm db 'wasm.ru',0
BigMessage db 'Сообщение слишком большое! Смотри в файле D:\ClientSave.txt',0
FilterString db "All Files",0,"*.*",0
db "Text Files",0,"*.txt",0,0
.data?
sock dd ?
hFile HANDLE ?
hMemory HANDLE ?
pMemory DWORD ?
SizeReadWrite DWORD ?
.const
MEMSIZE equ 65535
.code
start:
;*******************************************************************************
invoke WSAStartup,101h,addr wsadata
invoke gethostbyname,offset Wasm
mov eax,[eax+12] ;эти три строчки - получение ip-адреса из возвращаемой gethostbyname структуры
mov eax,[eax]
mov eax,[eax]
mov sin.sin_addr, eax
invoke socket,AF_INET,SOCK_STREAM,IPPROTO_TCP
mov sock,eax
.if (eax == INVALID_SOCKET)
Invoke MessageBox,0,0,0,MB_OK
jmp exit
.endif
mov sin.sin_family,AF_INET
invoke htons,80
mov sin.sin_port,ax
mov sin.sin_family, AF_INET
invoke connect, sock, addr sin ,sizeof sin
invoke MySend,addr Message
invoke MyRecv,addr Buffer1
invoke ConsiderSumbol,addr Buffer1
.IF eax < 50
invoke MessageBox,0,addr Buffer1,addr AppMessadge,MB_OK
.ELSE
invoke MessageBox,0,addr BigMessage,addr AppMessadge,MB_OK
.ENDIF
invoke closesocket, sock
invoke WSACleanup
invoke SaveInFile,addr Buffer1
;*******************************************************************************
exit:
invoke ExitProcess,0
MyRecv proc String :DWORD
mov edi,String
.WHILE TRUE
@1:.IF eax == SOCKET_ERROR
invoke MessageBox, NULL, addr ErrorConnect, addr ErrorConnect, MB_OK
invoke connect, sock, addr sin ,sizeof sin
jmp @1
.ENDIF
invoke recv,sock,edi,1,0
.BREAK .IF ( byte ptr [edi] == 00 )
inc edi
.ENDW
ret
MyRecv endp
MySend proc String :DWORD
mov edi,String
.WHILE TRUE
.BREAK .IF ( byte ptr [edi] == 00 )
@1:.IF eax == SOCKET_ERROR
invoke MessageBox, NULL, addr ErrorConnect, addr ErrorConnect, MB_OK
invoke connect, sock, addr sin ,sizeof sin
jmp @1
.ENDIF
invoke send,sock,edi,1,0
inc edi
.ENDW
ret
MySend endp
include MyProc.inc
end start
Да чуть не забыл. Если вдруг кому нужно еще файлы которые мы Инклудим в начале моего исходника и в конце, а то без них не будет пахать.
Нужно сохранить так MyInc.inc
Код:
MySend PROTO :DWORD
MyRecv PROTO :DWORD
ConsiderSumbol PROTO :DWORD
SaveInFile PROTO :DWORD
MyRecv PROTO :DWORD
ConsiderSumbol PROTO :DWORD
SaveInFile PROTO :DWORD
Нужно сохранить так MyProc.inc
Код:
ConsiderSumbol proc Get :DWORD
mov edi,Get
mov ecx,0
.WHILE TRUE
.BREAK .IF (byte ptr [edi] == 00)
inc edi
inc ecx
.ENDW
mov eax,ecx
ret
ConsiderSumbol endp
SaveInFile proc Buf :DWORD
invoke CreateFile,ADDR SaveFileAddres,\
GENERIC_READ or GENERIC_WRITE ,\
FILE_SHARE_READ or FILE_SHARE_WRITE,\
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,\
0
mov hFile,eax
mov eax, Buf
mov pMemory, eax
invoke ConsiderSumbol, Buf
invoke WriteFile,hFile,pMemory,eax,ADDR SizeReadWrite,NULL
invoke CloseHandle,hFile
invoke GlobalUnlock,pMemory
ret
SaveInFile endp
mov edi,Get
mov ecx,0
.WHILE TRUE
.BREAK .IF (byte ptr [edi] == 00)
inc edi
inc ecx
.ENDW
mov eax,ecx
ret
ConsiderSumbol endp
SaveInFile proc Buf :DWORD
invoke CreateFile,ADDR SaveFileAddres,\
GENERIC_READ or GENERIC_WRITE ,\
FILE_SHARE_READ or FILE_SHARE_WRITE,\
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,\
0
mov hFile,eax
mov eax, Buf
mov pMemory, eax
invoke ConsiderSumbol, Buf
invoke WriteFile,hFile,pMemory,eax,ADDR SizeReadWrite,NULL
invoke CloseHandle,hFile
invoke GlobalUnlock,pMemory
ret
SaveInFile endp