winsock, проблема с connect()

Тема в разделе "WASM.NETWORKS", создана пользователем vadak, 18 сен 2011.

  1. vadak

    vadak New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2010
    Сообщения:
    41
    Всем привет!!!
    Не могу разобраться в чем соль. функция connect возвращает: WSAETIMEDOUT. Сдается мне что неправильно заполнил структуру. Вот код:
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4. include C:\asma\masm32\include\windows.inc
    5. include C:\asma\masm32\include\kernel32.inc
    6. includelib C:\asma\masm32\lib\kernel32.lib
    7. include C:\asma\masm32\include\user32.inc
    8. includelib C:\asma\masm32\lib\user32.lib
    9. includelib C:\asma\masm32\lib\ws2_32.lib
    10. include C:\asma\masm32\include\ws2_32.inc
    11.  
    12. .data
    13. sock SOCKET ?                                          
    14. wsadata WSADATA <>
    15. ADDRE db "94.100.191.203",0
    16. PORT    dw 25
    17. sock_addr sockaddr_in <>
    18. .code
    19. start:
    20.     push offset wsadata                
    21.     push 0101h                         
    22.     call WSAStartup                    
    23.     cmp eax,0                          
    24.     jne quit
    25.  
    26.     push 0
    27.     push SOCK_STREAM
    28.     push AF_INET
    29.     call socket
    30.     cmp eax,0
    31.     je quit
    32.     mov sock, eax
    33.    
    34.     push offset PORT
    35.     call htons
    36.     mov sock_addr.sin_port,ax
    37.    
    38.     push offset ADDRE
    39.     call inet_addr
    40.     mov sock_addr.sin_addr, eax
    41.    
    42.     ;mov sock_addr.sin_family, AF_INET
    43.     mov eax, type sock_addr
    44.     push eax
    45.     push offset sock_addr
    46.     push sock
    47.     call connect
    48.         cmp eax,-1
    49.         je quit
    50.    
    51. quit:
    52.     call WSACleanup
    53.     ret
    54. end start
     
  2. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    смотри снифером, куда ломится прога. или мож тебе провайдеры порезали 25 порт.
    а вообще mov sock_addr.sin_family, AF_INET вроде как обязательна.
    К томуже sockaddr_in желательно чтобы была инициализирована нулями
     
  3. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    535
    сначала проще из командной строки сделать telnet 94.100.191.203 25 и убедиться в наличии ответа.
     
  4. vadak

    vadak New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2010
    Сообщения:
    41
    25 открыт, а сниффер молчит, может посеръезнее сниффер надо у меня простой стоит smsniff, а кстати slesh подскажи как структуру обнулять, в сях там попроще ZeroMemory или
    memset, а здесь похоже в цикл загонять надо.
     
  5. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    RtlZeroMemory есть такая.
    А вообще почему
    push offset PORT ?
    Ты должен в стек загнать не адрес переменной которая хранит порт, а непосредственно значение порта.
    Юзай нормальные сниферы типа - WireShark или CommView
     
  6. vadak

    vadak New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2010
    Сообщения:
    41
    до меня только щас доперло: push dword ptr[PORT]
    Всем спаибо за внимание!