сокеты

Тема в разделе "WASM.BEGINNERS", создана пользователем splinter, 14 окт 2009.

  1. splinter

    splinter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    Написал код, который поидее должен быть правильным, но что-то не сраюатывает.

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


    Код (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

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    код должен отправить простой гет запролс на васм и получить ответ. Полученный ответ вывести в консоль.
     
  3. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    это символы перехода на новою строку ???

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

    razor Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    40
    добавь WSAGetLastError после recv и код ошибки в студию
     
  5. splinter

    splinter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    ну да, типа как в пхп \r\n
    или в дельфи #10+#13

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

    splinter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    сделал так

    Код (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

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    179
    Теж сказали, что неправильно записал
     
  8. splinter

    splinter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    изменил на

    Код (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

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    точнее атк:

    Код (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

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    в делфи оно даже вот так:
    'what is this-'#13#10'i dont even'#0
     
  11. splinter

    splinter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    суть не в этом
     
  12. bendme

    bendme New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    179
    сам же соглашаешься, что в переводе строки участвует два байта, а фигачишь один

    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

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    а разве 0ADh и 0Ah,0Dh не одно и тоже???
    в любом случае уверен, что дело не в этом
     
  14. bendme

    bendme New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    179
    это разные вещи. ADh - это один символ
     
  15. bendme

    bendme New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    179
    Сделай сначала нормальный запрос, потом смотри сниффером, отправляется ли он, и как он выглядит.
     
  16. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    facepalm.tar.gz

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

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
    Эхе-хе, новое поколение белорусских хакеров подрастает… Вырастет и заломает васм. Круг замкнётся. :)

     
  18. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    вот-вот!
    G13, я уже вижу тебя смотрителем .BEGINNERS .D
     
  19. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    если тебя так прет записывать то ты пропустил 0 должно быть
    0a0dh
     
  20. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    к сведению ТС запись 0XXh определяет ОДИН байт так как по определению меньше 100h, которое в байт не помещается и требует слова (2х байтов)
    для указания что число меньшее 100h записывается как слово добавляют WORD PTR