сокеты

Discussion in 'WASM.BEGINNERS' started by splinter, Oct 14, 2009.

  1. splinter

    splinter New Member

    Blog Posts:
    0
    Написал код, который поидее должен быть правильным, но что-то не сраюатывает.

    Походу в функции recv, хоть всё делал со справочником, смотрел примеры и т.д.


    Code (Text):
    1. .386
    2.  
    3. .model flat, stdcall
    4. option casemap:none
    5.  
    6. include \masm32\include\windows.inc
    7. include \masm32\include\user32.inc
    8. include \masm32\include\kernel32.inc
    9. include \masm32\include\ws2_32.inc
    10.  
    11. includelib \masm32\lib\user32.lib
    12. includelib \masm32\lib\kernel32.lib
    13. includelib \masm32\lib\ws2_32.lib
    14.  
    15. .data
    16.     hinst       dd ?
    17.     wsd         WSADATA <?>
    18.     sockhan     dd ?
    19.     sa          sockaddr_in <?>
    20.     serv_addr   db 'wasm.ru',0
    21.     send_text   db 'GET /all.php?mode=art HTTP/1.1',0ADh,
    22.                    'Host: oko.by',0ADh,
    23.                    'User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5',0ADh,
    24.                    'Accept: text/html',0ADh,
    25.                    'Connection: close',0ADh,0
    26.     recv_text   db 256 dup(?)
    27. ; -------------------------------------------------------------------------
    28. ;                       Messages
    29. ; -------------------------------------------------------------------------
    30.     mess_p      dd  ?   ; Óêàçàòåëü íà òåêñò   
    31.     error1      db  'initializing error',0
    32.     error2      db  'create socket error',0
    33.     error3      db  'can not get server address',0
    34.     error4      db  'can not connect to the server',0
    35.     error5      db  'sending failed',0
    36. .code
    37. start:
    38.         invoke GetStdHandle,STD_OUTPUT_HANDLE
    39.         mov hinst,eax
    40.        
    41.        
    42.         xor eax,eax
    43.         mov ax,0202h
    44.         invoke WSAStartup,eax,offset wsd
    45.         cmp eax,0
    46.         jnz _error1
    47.        
    48.        
    49.         invoke socket,AF_INET,SOCK_STREAM,0
    50.         cmp eax,-1
    51.         jz _error2
    52.         mov sockhan,eax
    53.        
    54.        
    55.         mov sa.sin_family,AF_INET  
    56.         invoke htons,80             ; Ôóíêöèÿ ïîëó÷åíèÿ ïîðòà â ñåòåâîì ôîðìàòå
    57.         mov sa.sin_port,ax          ; Çàïèñûâàåì ïîóë÷åííîå çíà÷åíèå
    58.         invoke gethostbyname,offset serv_addr
    59.         cmp eax,0
    60.         jz _error3
    61.         mov eax,[eax+12]
    62.         mov eax,[eax]
    63.         mov sa.sin_addr,eax
    64.         invoke connect,sockhan,offset sa,sizeof sa
    65.         cmp eax,0
    66.         jnz _error4
    67.        
    68.         ; Îòïðàâëÿåì áàéòû íà ñåðâåð
    69.         invoke send,sockhan,offset send_text,sizeof send_text,0
    70.         cmp eax,SOCKET_ERROR
    71.         jz _error5
    72.        
    73.         invoke recv,sockhan,offset recv_text,256,0
    74.         ; Ïðè óñïåøíîì èñõîäå, âîçâðàùàåò êîëè÷åñòâî ïîëó÷åííûé áàéò
    75.         ; --> eax
    76.        
    77.         invoke WriteConsole,hinst,offset recv_text,20,0,0
    78.        
    79.        
    80.        
    81.        
    82.         jmp _exit
    83.     _error5:   
    84.         mov mess_p,offset error5
    85.         jmp _cr_text           
    86.     _error4:
    87.         mov mess_p,offset error4
    88.         jmp _cr_text       
    89.     _error3:
    90.         mov mess_p,offset error3
    91.         jmp _cr_text   
    92.     _error2:
    93.         mov mess_p,offset error2
    94.         jmp _cr_text
    95.     _error1:
    96.         mov mess_p,offset error1
    97.     _cr_text:  
    98.         invoke lstrlen,mess_p
    99.         invoke WriteConsole,hinst,mess_p,eax,0,0
    100.     _exit: 
    101.         invoke closesocket,sockhan     
    102.         invoke CloseHandle,hinst
    103.         invoke ExitProcess,0
    104. end start
    код постарался сделать максималдьно читабельным...
     
  2. splinter

    splinter New Member

    Blog Posts:
    0
    код должен отправить простой гет запролс на васм и получить ответ. Полученный ответ вывести в консоль.
     
  3. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    это символы перехода на новою строку ???

    0ADh это байт а переход на новую - 2 байта 0ah 0dh
     
  4. razor

    razor Member

    Blog Posts:
    0
    добавь WSAGetLastError после recv и код ошибки в студию
     
  5. splinter

    splinter New Member

    Blog Posts:
    0
    ну да, типа как в пхп \r\n
    или в дельфи #10+#13

    типа 1 для никса другой для вин, вроде так
     
  6. splinter

    splinter New Member

    Blog Posts:
    0
    сделал так

    Code (Text):
    1.         invoke recv,sockhan,offset recv_text,256,0
    2.         ; Ïðè óñïåøíîì èñõîäå, âîçâðàùàåò êîëè÷åñòâî ïîëó÷åííûé áàéò
    3.         ; --> eax
    4.        
    5.         invoke WSAGetLastError
    запустил в отладчике. Ф-ия recv возвращает 0, (должна кол-во аолученных файт)
    и WSAGetLastError тоже нуль.
    смотрел в отладчике
     
  7. bendme

    bendme New Member

    Blog Posts:
    0
    Теж сказали, что неправильно записал
     
  8. splinter

    splinter New Member

    Blog Posts:
    0
    изменил на

    Code (Text):
    1.     send_text   db 'GET /all.php?mode=art HTTP/1.1',0Ah,
    2.                    'Host: oko.by',0Ah,
    3.                    'User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5',0Ah,
    4.                    'Accept: text/html',0Ah,
    5.                    'Connection: close',0Ah,0
    всё равно не работает... взгляните на код целиком, кто разбирается в сетевом программировании
     
  9. splinter

    splinter New Member

    Blog Posts:
    0
    точнее атк:

    Code (Text):
    1.     send_text   db 'GET /all.php?mode=art HTTP/1.1',0Ah,
    2.                    'Host: wasm.ru',0Ah,
    3.                    'User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5',0Ah,
    4.                    'Accept: text/html',0Ah,
    5.                    'Connection: close',0Ah,0
    но дело не в отправляемом запросе, а в коде
     
  10. Com[e]r

    Com[e]r Com[e]r

    Blog Posts:
    0
    в делфи оно даже вот так:
    'what is this-'#13#10'i dont even'#0
     
  11. splinter

    splinter New Member

    Blog Posts:
    0
    суть не в этом
     
  12. bendme

    bendme New Member

    Blog Posts:
    0
    сам же соглашаешься, что в переводе строки участвует два байта, а фигачишь один

    send_text db 'GET /all.php?mode=art HTTP/1.1',0Ah,0Dh,
    'Host: wasm.ru',0Ah,0Dh,
    'User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5',0Ah,
    'Accept: text/html',0Ah,0Dh,
    'Connection: close',0Ah,0

    включи сниффер и посмотри че там у тебя функция send передает
     
  13. splinter

    splinter New Member

    Blog Posts:
    0
    а разве 0ADh и 0Ah,0Dh не одно и тоже???
    в любом случае уверен, что дело не в этом
     
  14. bendme

    bendme New Member

    Blog Posts:
    0
    это разные вещи. ADh - это один символ
     
  15. bendme

    bendme New Member

    Blog Posts:
    0
    Сделай сначала нормальный запрос, потом смотри сниффером, отправляется ли он, и как он выглядит.
     
  16. Com[e]r

    Com[e]r Com[e]r

    Blog Posts:
    0
    facepalm.tar.gz

    рисуй после "коннекшн: клоуз" rnrn, тестируй.
     
  17. G13

    G13 New Member

    Blog Posts:
    0
    Эхе-хе, новое поколение белорусских хакеров подрастает… Вырастет и заломает васм. Круг замкнётся. :)

     
  18. Com[e]r

    Com[e]r Com[e]r

    Blog Posts:
    0
    вот-вот!
    G13, я уже вижу тебя смотрителем .BEGINNERS .D
     
  19. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    если тебя так прет записывать то ты пропустил 0 должно быть
    0a0dh
     
  20. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    к сведению ТС запись 0XXh определяет ОДИН байт так как по определению меньше 100h, которое в байт не помещается и требует слова (2х байтов)
    для указания что число меньшее 100h записывается как слово добавляют WORD PTR