Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Подскажите плиз, где ошибка?
 
Вот, моя прога, которая при соединение отправляет трафик назад.
вроде всё работает, но есть одна проблема.
у клиента есть ftp сервак, по теории - если он конектится к моему 21 порту, то должен попасть к себе на ftp.
почему-то не попадает  
подскажите плиз, где ошибка?

.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\wsock32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\advapi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\wsock32.lib
includelib \masm32\lib\advapi32.lib
include \masm32\include\ws2_32.inc
includelib \masm32\lib\ws2_32.lib

WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD

.DATA  
szConnect db 'Connected...', 0
szListBox db 'LISTBOX', 0    
ClassName db "xClass",0
AppName db "redir",0
IconName db "Icon",0
wsadata WSADATA <>
sin sockaddr_in <>
WM_SOCKET equ WM_USER + 100

.DATA?
hListBox dd ?
sock     dd       ?
SockAddr sockaddr_in <>

cl_addr sockaddr_in <>
hInstance dd ?
CommandLine dd ?

client dd ?
BufStr db 6666 dup (?)   ; Буфер приема
p_addrlen db 6666 dup (?)
Port dd ?

.CODE
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
invoke ExitProcess,eax

WinMain proc  hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DW ORD
        LOCAL wc:WNDCLASSEX
        LOCAL msg:MSG
        LOCAL hwnd:HWND
        mov   wc.cbSize,SIZEOF WNDCLASSEX
        mov   wc.style, CS_HREDRAW or CS_VREDRAW
        mov   wc.lpfnWndProc, OFFSET WndProc
        mov   wc.cbClsExtra,NULL
        mov   wc.cbWndExtra,NULL
        push  hInstance
        pop   wc.hInstance
        mov   wc.hbrBackground,COLOR_WINDOW+1
        mov   wc.lpszMenuName,NULL
        mov   wc.lpszClassName,OFFSET ClassName
        invoke LoadIcon,NULL,IDI_APPLICATION
        mov   wc.hIcon,eax
        mov   wc.hIconSm,eax
        invoke LoadCursor,NULL,IDC_ARROW
        mov   wc.hCursor,eax
        invoke RegisterClassEx, addr wc

        INVOKE CreateWindowEx,WS_EX_TOPMOST,ADDR ClassName,ADDR AppName,\
            WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+WS_ VISIBLE,\
            CW_USEDEFAULT,100, 200, 150,150,NULL, hInst,NULL
        mov   hwnd,eax
      
        INVOKE CreateWindowEx,NULL, addr szListBox,ADDR AppName,\
            WS_CHILD+WS_VISIBLE+LBS_STANDARD-LBS_SORT,10,  10, 174, 100, hwnd,NULL, hInst,NULL
        mov   hListBox,eax

invoke ShowWindow, hwnd,SW_SHOWNORMAL
invoke UpdateWindow, hwnd

; --------------------------------------  Инициализация сокетных функций
invoke WSAStartup,101h,addr wsadata
invoke socket,AF_INET,SOCK_STREAM,0
mov sock,eax

invoke  WSAAsyncSelect,sock,hwnd,WM_SOCKET,FD_ACCEPT+FD_READ+FD_CLOS E
mov sin.sin_family,AF_INET
mov Port,21
invoke htons,Port
mov sin.sin_port,ax

mov sin.sin_addr,INADDR_ANY   ; Адрес - любой для сервера
invoke bind, sock,addr sin,sizeof sin   ; Связь адресов и порта с сервером
invoke listen,sock,SOMAXCONN
         
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam
ret
WinMain endp

;  ------------------------------------------------------------ -----------------

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
       .IF uMsg == WM_CREATE
        .ELSEIF uMsg == WM_DESTROY
            invoke WSACleanup
            invoke PostQuitMessage,NULL
            
        .ELSEIF uMsg == WM_SOCKET
             mov eax,lParam
           .IF ax == FD_ACCEPT  ; Соединение
              shr ax,16
                .IF ax == NULL

invoke accept,sock,addr SockAddr,sizeof sockaddr_in
cmp eax, -1

invoke SendMessage, hListBox, LB_ADDSTRING, 0, addr szConnect

        .ENDIF

     .ELSEIF ax == FD_READ   ;Реакция на получение данных от клиента
; Обнулим буфер для получения
             mov ecx,6666
             mov edi,offset BufStr
             lll: mov byte ptr [edi],0
             inc edi
             loop lll
             mov eax,wParam
             mov client,eax
              invoke recv,client,addr BufStr,sizeof BufStr,0   ; Получим данные в BufStr
invoke accept,sock,addr SockAddr,sizeof sockaddr_in
cmp eax, -1
                  .ELSEIF  ax == FD_CLOSE
                          mov eax,wParam
                         invoke closesocket, eax
              .ENDIF
   .ELSEIF
                         invoke DefWindowProc,hWnd,uMsg,wParam,lParam
     ret
.ENDIF
xor eax,eax
ret
WndProc endp
END start  

p.s. я пока токо-токо изучаю сокеты, поетому нуна помощь.
 
Если здесь можно было бы дать ссылку на ресурс и чтоб админы это не восприняли как рекламу -мог бы свести с людьми которые не откажутся помочь, причём совершенно бесплатно!!! Лично испробовал!!!
 
rams, а как по твоему, зачем форумы нужны?
если тут не хочешь, напиши плиз мне в привате, или на мыло.
 
[moderator hat]

2 rams
Здесь никто не запрещает давать ссылки на ресурсы. Запрещена только явная реклама.

[/moderator hat]
 
cmp eax, -1 после вызова accept
писать не обязательно всё равно в коде оно используется

>при соединение отправляет трафик назад
вот, извини, не увидел я в коде где как это происходит-
ошибка как минимум здесь
хотя я не совсем понял какая цель программы?
принимать данные а затем отправлять ?
 
Ну тогда rusfaq.ru раздел Програмирование на Ассемблере!!!
 
И кстати, зачем второй accept в обработчике FD_READ?

;---
;NK
 
Цитата
jabber пишет:
cmp eax, -1 после вызова accept
писать не обязательно всё равно в коде оно используется

>при соединение отправляет трафик назад
вот, извини, не увидел я в коде где как это происходит-
ошибка как минимум здесь
хотя я не совсем понял какая цель программы?
принимать данные а затем отправлять ?
посмотри плиз сюда
мне дали тот код, и сказали что она отправляет назад tcp

Цитата
rams пишет:
Ну тогда rusfaq.ru раздел Програмирование на Ассемблере!!!
thenx, действительно полезный урл.


Цитата
__NK пишет:
И кстати, зачем второй accept в обработчике FD_READ?

;---
;NK
это я просто эксперементировал  
 
Darvin
да код дал я,
а вот то что он "что она отправляет назад tcp"
я не говорил это точно
просто показал как вызывается ф-я accept в masm
проблема в том, что ты не понимаешь для чего
нужно cmp eax, -1
это просто проверка значения возвращаемого функцией
в регистр eax. если -1, т.е. INVALID_SOCKET
то jump туда куда нужно...
на пример:
@@:
invoke accept,sock,addr SockAddr,sizeof sockaddr_in
cmp eax, -1
jz @B
 
jabber, когда вопрос задавал - не понимал. Как раз сёдня весь день всякие статьи читал и более и менее понял что к чему....  
но до сех пор не знаю как замутить перенаправление..

я так понял, нету глобальных команд типа "redir_sock", да?  
 
сорри за флуд.
Т.к не наю как зафиксить ip клиента,решил для начала  перенаправить к определённому IP.
Вроде сделал так, что при соединении конектит клиента с другим ip'ом, но не как не получается передать данные.
Может подскажите как сделать?

вот кусок кода:
             .ELSEIF uMsg==WM_SOCKET
                 mov eax, lParam
                 .IF ax==FD_ACCEPT
                      shr ax,16
                      .IF ax == NULL
                            invoke accept, sock, 0, 0
                            mov  client, eax
;  ------------------------------------------------------------ -------------
invoke WSAStartup,101h, addr wsadata
invoke socket,AF_INET,SOCK_STREAM,0
mov sock,eax

invoke WSAAsyncSelect,sock,hWnd,WM_SOCKET,FD_CONNECT+FD_CLOSE
invoke htons, 21
mov sin.sin_port, ax  
mov sin.sin_family, AF_INET

invoke inet_addr, addr szAdresIP
mov sin.sin_addr, eax
invoke connect, sock, addr sin, sizeof sin
;  ------------------------------------------------------------ -------------

                            invoke SendMessage, hListBox, LB_ADDSTRING, 0, addr szConnect
                       .ENDIF
                 .ELSEIF ax==FD_READ
                    shr eax, 16
                     .IF ax==NULL
                            invoke recv, client, addr buffer, 1024, 0
                     .ENDIF

                 .ELSEIF ax==FD_CONNECT
                    shr eax, 16
                     .IF ax==NULL
                            invoke send, client, addr buffer, 1024, 0
                     .ENDIF
                     
                 .ELSEIF ax==FD_CLOSE
                     invoke closesocket, wParam
                     invoke SendMessage, hListBox, LB_ADDSTRING, 0, addr szDisconnect
                 .ENDIF
Страницы: 1
Читают тему