Вот, моя прога, которая при соединение отправляет трафик назад.
вроде всё работает, но есть одна проблема.
у клиента есть 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. я пока токо-токо изучаю сокеты, поетому нуна помощь.
вроде всё работает, но есть одна проблема.
у клиента есть 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. я пока токо-токо изучаю сокеты, поетому нуна помощь.