Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

http запрос

10K
07 ноября 2009 года
palevo060
144 / / 05.09.2009
Лан презадам свой ворос по другому. Я довел до ума исходник. Теперь он отправляет сообщение на (77.221.159.154 тоесть на wasm.ru). Но не все. К примеру я посылаю "привет сервер" и снифер говорит, что сообщение прошло.
А если я посылаю это:
 
Код:
'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

то снифер говорит, что я не посылал никакого сообщения а сама прога висит и ждет ответа от сервера, которого само собой не будет и быть не может.

Пажаста разъясните ситуацию.
Вроде вопрос задал правильно, если нет намекните)


Вот исходник проги:
Код:
.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
10K
08 ноября 2009 года
palevo060
144 / / 05.09.2009
Алелуя друзья мои) у меня получилось. Выходит, что вся проблема была в неправильном запросе и еще кое чем:D. Спасибо моему сетевому анализатору (CommView).

Да и отвечу на свой вопрос:

Вот этот код:
 
Код:
invoke gethostbyname,offset Wasm     
      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


Да чуть не забыл. Если вдруг кому нужно еще файлы которые мы Инклудим в начале моего исходника и в конце, а то без них не будет пахать.

Нужно сохранить так MyInc.inc
 
Код:
MySend 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
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог