|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 5, 2003 09:11:23 .386 .model flat, stdcall option casemap :none ; case sensitive include \MASM32\INCLUDE1\WINDOWS.INC include \MASM32\INCLUDE1\KERNEL32.INC include \MASM32\INCLUDE1\USER32.INC include \MASM32\INCLUDE1\WS2_32.INC includelib \MASM32\LIB\KERNEL32.LIB includelib \MASM32\LIB\USER32.LIB includelib \MASM32\LIB\WS2_32.LIB DlgMain proto :dword, :dword, :dword, :dword SendReguest proto :dword, :dword FillBuffer proto :dword, :dword, :byte checksum proto :dword, :dword fill_icmp_data proto :dword, :dword decode_resp proto :dword, :dword IP struc ip_hl_v db ? ; header length version ip_tos db ? ; type of service ip_len dw ? ; total length ip_id dw ? ; identification ip_off dw ? ; fragment offset field ip_ttl db ? ; time to live ip_p db ? ; protocol ip_sum dw ? ; checksum ip_src dd ? ; source address ip_dst dd ? ; dest address IP ends ICMP struc i_type db ? i_code db ? ; type sub code i_cksum dw ? i_id dw ? i_seq dw ? timestamp dd ? ICMP ends ICMP_ECHO_REQUEST equ 8 MAX_PACKET equ 1024 DEFAULT_PACKET_SIZE equ 32 .data ClassName db "DLGCLASS", 0 DlgName db "MainDialog", 0 h_Dlg dd 0 hInstance dd 0 pPacket dd 0 Pfrom sockaddr_in <> fromlen dd sizeof sockaddr_in recvbuf db MAX_PACKET dup (0) sockRaw dd 0 template1 db "Recived %d bytes from %s - time %d ms",13,10,0 WM_SOCKET equ WM_USER + 104 id_ dw 0 TemplSendError db "Error Send data error code: %d",0 TemplRecvError db "Error Recv data error code: %d",0 szErrorTimeout db "Error time out ",0 szErrorAddrMes db "Error IP addres",0 szlocalhost db "localhost",0 timer1_id dd 87579 recvFlag dd 0 OutBuffer dd 300 dup (0) .code start: invoke GetModuleHandleA, NULL mov hInstance, eax invoke DlgMain, hInstance, NULL, NULL, SW_SHOWDEFAULT invoke closesocket, sockRaw invoke ExitProcess, 0 ;################################################################ DlgMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD LOCAL wc : WNDCLASSEX LOCAL msg : MSG mov wc.cbSize, SIZEOF WNDCLASSEX mov wc.style, CS_HREDRAW or CS_VREDRAW mov wc.lpfnWndProc, OFFSET DlgProc mov wc.cbClsExtra, NULL mov wc.cbWndExtra, DLGWINDOWEXTRA push hInst pop wc.hInstance mov wc.hbrBackground, COLOR_BTNFACE+1 mov wc.lpszMenuName, NULL mov wc.lpszClassName, OFFSET ClassName mov wc.hIcon, 0 mov wc.hIconSm, 0 mov wc.hCursor, 0 invoke RegisterClassExA, addr wc invoke CreateDialogParamA, hInstance, ADDR DlgName, NULL, NULL, NULL mov h_Dlg, EAX invoke ShowWindow, h_Dlg, SW_SHOWNORMAL invoke UpdateWindow, h_Dlg invoke SetTimer, h_Dlg, timer1_id, 1000, 0 call init_socket .WHILE TRUE invoke GetMessageA, ADDR msg,NULL,0,0 .BREAK .IF (!EAX) invoke IsDialogMessage, h_Dlg, ADDR msg .IF eax ==FALSE invoke TranslateMessage, ADDR msg invoke DispatchMessageA, ADDR msg .ENDIF .ENDW mov eax, msg.wParam ret DlgMain ENDP ;################################################################ DlgProc proc uses edi esi ebx hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL intBufer : dword .if uMsg == WM_DESTROY invoke PostQuitMessage, NULL .elseif uMsg == WM_COMMAND mov EAX, wParam .if ax == 35500 invoke SendDlgItemMessageA, hDlg, 10098, WM_GETTEXT, 300, addr OutBuffer .if eax ==0 invoke lstrcpy, addr OutBuffer, addr szlocalhost invoke SendDlgItemMessageA, hDlg, 10098, WM_SETTEXT, 0, addr OutBuffer .endif invoke GetDlgItemInt, h_Dlg, 10099, addr intBufer, FALSE .if eax > MAX_PACKET invoke SetDlgItemInt, h_Dlg, 10099, MAX_PACKET, FALSE mov eax, MAX_PACKET .elseif intBufer == FALSE invoke SetDlgItemInt, h_Dlg, 10099, DEFAULT_PACKET_SIZE, FALSE mov eax, DEFAULT_PACKET_SIZE .endif invoke SendReguest, addr OutBuffer, eax .endif .elseif uMsg == WM_TIMER .if recvFlag == 4 invoke SendDlgItemMessageA, hDlg, 10100, WM_SETTEXT, 0, addr szErrorTimeout .endif .elseif uMsg == WM_SOCKET mov eax,lParam .if ax == FD_READ mov recvFlag, 0 invoke recvfrom, sockRaw, addr recvbuf, MAX_PACKET, 0, addr Pfrom, addr fromlen .if eax == SOCKET_ERROR Scall wsprintfA, offset OutBuffer, offset TemplRecvError, eax add esp, 4*3 invoke SendDlgItemMessageA, h_Dlg, 10100, WM_SETTEXT, 0, addr OutBuffer .endif invoke decode_resp, addr recvbuf, addr Pfrom .endif .else invoke DefWindowProcA, hDlg, uMsg, wParam, lParam ret .endif xor eax, eax ret DlgProc ENDP ;################################################################ checksum proc buffer:dword, syize:dword LOCAL cksum : dword mov cksum, 0 @@: cmp syize, 1 jle @F mov eax, buffer xor ecx, ecx mov cx, [eax] mov edx, cksum add edx, ecx mov cksum, edx mov eax, buffer add eax, 2 mov buffer, eax mov ecx, syize sub ecx, 2 mov syize, ecx jmp @b @@: cmp syize, 0 jz @f mov edx, buffer xor eax, eax mov al, [edx] mov ecx, cksum add ecx, eax mov cksum, ecx @@: mov edx, cksum shr edx, 10h mov eax, cksum and eax, 0FFFFh add edx, eax mov cksum, edx mov ecx, cksum shr ecx, 10h mov edx, cksum add edx, ecx mov cksum, edx mov eax, cksum not eax ret checksum endp ;################################################################ SendReguest proc uses edi esi ebx pAddrres:dword, packSiz:dword LOCAL dest : sockaddr_in invoke FillBuffer, addr dest, sizeof sockaddr_in, 0 invoke gethostbyname, pAddrres .if eax != 0 mov eax, (hostent ptr [eax]).h_list mov eax, [eax] mov eax, [eax] mov dest.sin_addr, eax .else invoke inet_addr, pAddrres .endif .if eax != INADDR_NONE mov dest.sin_addr, eax mov dest.sin_family, AF_INET mov ebx, packSiz add ebx, sizeof ICMP invoke GlobalAlloc, 0, ebx mov pPacket, eax invoke FillBuffer, pPacket, ebx, 0 invoke fill_icmp_data, pPacket, ebx invoke sendto, sockRaw, pPacket, ebx, 0, addr dest, sizeof sockaddr_in push eax invoke GlobalFree, pPacket pop eax .if eax == SOCKET_ERROR invoke WSAGetLastError Scall wsprintfA, offset OutBuffer, offset TemplSendError, eax add esp, 4*3 invoke SendDlgItemMessageA, h_Dlg, 10100, WM_SETTEXT, 0, addr OutBuffer mov recvFlag, 0 ret .endif mov recvFlag, 4 ret .endif invoke SendDlgItemMessageA, h_Dlg, 10100, WM_SETTEXT, 0, addr szErrorAddrMes ret SendReguest endp ;############################################################3 FillBuffer proc lpBuffer:DWORD,lenBuffer:DWORD,TheChar:BYTE push edi mov edi, lpBuffer ; address of buffer mov ecx, lenBuffer ; buffer length mov al, TheChar ; load al with character rep stosb ; write character to buffer until ecx = 0 pop edi ret FillBuffer endp ;################################################################# init_socket proc LOCAL wsadata : WSADATA invoke WSAStartup, 202h, addr wsadata .if eax == 0 invoke WSASocketA, AF_INET, SOCK_RAW, IPPROTO_ICMP, 0, 0, 0 ;IPPROTO_ICMP .if eax != -1 mov sockRaw, eax invoke WSAAsyncSelect, sockRaw, h_Dlg, WM_SOCKET, FD_CONNECT+FD_READ+FD_CLOSE+FD_ACCEPT+FD_WRITE + FD_OOB .if eax != -1 mov eax, TRUE ret .endif .endif .endif mov eax, FALSE ret init_socket endp ;###############################################################3 decode_resp proc uses edi esi ebx pRecvData:dword, pRecvAddr:dword LOCAL sizretrn : dword LOCAL retrTim : dword LOCAL pAddrs : dword mov edi, pRecvAddr mov ebx, pRecvData invoke inet_ntoa, dword ptr (sockaddr_in ptr [edi]).sin_addr mov pAddrs, eax mov ax, (IP ptr [ebx]).ip_len invoke htons, ax movzx eax, ax mov sizretrn, eax mov al, (IP ptr [ebx]).ip_hl_v and al, 0fh movzx eax, al lea ecx, [eax*4] add ebx, ecx .if byte ptr (ICMP ptr [ebx]).i_type == ICMP_ECHOREPLY mov ax, id_ .if word ptr (ICMP ptr [ebx]).i_id == ax invoke GetTickCount mov ecx, (ICMP ptr [ebx]).timestamp sub eax, ecx mov retrTim, eax lea edx, OutBuffer Scall wsprintfA, edx, offset template1, sizretrn, pAddrs, retrTim add esp, 4*5 invoke SendDlgItemMessageA, h_Dlg, 10100, WM_SETTEXT, 0, addr OutBuffer .endif .endif ret decode_resp endp ;################################################################ fill_icmp_data proc uses edi esi ebx icmp_data:dword, datasize:dword mov ebx, icmp_data mov (ICMP ptr [ebx]).i_type, ICMP_ECHO_REQUEST mov (ICMP ptr [ebx]).i_code, 0 mov (ICMP ptr [ebx]).i_cksum, 0 invoke GetCurrentProcessId mov id_, ax mov (ICMP ptr [ebx]).i_id, ax mov (ICMP ptr [ebx]).i_seq, 1 invoke GetTickCount mov (ICMP ptr [ebx]).timestamp, eax add ebx, sizeof ICMP mov eax, datasize sub eax, sizeof ICMP invoke FillBuffer, ebx, eax, 'E' invoke checksum, icmp_data, datasize sub ebx, sizeof ICMP mov (ICMP ptr [ebx]).i_cksum, ax ret fill_icmp_data endp ;################################################################ end start ====================================================================== #include "\masm32\include\resource.h" MAINDIALOG DIALOGEX MOVEABLE PURE LOADONCALL DISCARDABLE 49, 7, 212, 106, 0 STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED CAPTION "PINGER" CLASS "DLGCLASS" FONT 12, "System", 700, 0 /*FALSE*/ BEGIN PUSHBUTTON "Ping", 35500, 61,85,71,11, 0, , 0 LTEXT "Addres or IP to Ping", IDC_STATIC, 8,18,98,9, SS_LEFT, , 0 EDITTEXT 10098, 7,29,149,11, ES_AUTOHSCROLL | ES_LEFT, , 0 LTEXT "Packet size", IDC_STATIC, 160,18,41,9, SS_LEFT, , 0 EDITTEXT 10099, 161,29,42,11, ES_AUTOHSCROLL | ES_LEFT, , 0 LTEXT "Replay", IDC_STATIC, 6,43,153,9, SS_LEFT, , 0 EDITTEXT 10100, 7,56,199,23, ES_AUTOHSCROLL | ES_LOWERCASE | ES_MULTILINE | ES_READONLY | ES_LEFT, , 0 GROUPBOX "", IDC_STATIC, 2,5,208,98, 0, , 0 END |
|
|
Дата: Мар 5, 2003 17:57:51 Что, такой злой? |
|
|
Дата: Мар 22, 2003 16:06:15 у меня не компилируется говорит проблемма в - Scall wsprintfA, offset OutBuffer, offset TemplRecvError, eax |
|
|
Дата: Мар 22, 2003 20:54:07 Замените на invoke и уберите add esp,*** У меня всё компилируется и работает... как зверь! ((c) Аноним) |
|
|
Дата: Мар 24, 2003 05:52:22 у меня Windows XP - может из за этого не работает ? я вроде уже откомпилировал, но ни чего не происходит когда экзешник запускаю, только в памяти висит и все, а вообще что должно на экране появиться, а то у меня вообще ни чего не появляется ? |
|
|
Дата: Мар 24, 2003 17:38:18 Я пробовал на ME, NT4 и 2000 - всё OK! Правда, я там много чего поменял: добавил настройку исходящей последовательности байт (совсем не обязательно посылать 32 байта "abcdefg" и т.д.) Могу отправить на мыл исходник + exe. |
|
|
Дата: Мар 24, 2003 17:47:36 давай и исходник с изменениями если можно yandex2002@inbox.ru |
|
|
Дата: Мар 24, 2003 19:50:21 Отослал вместе с исходниками. Можете проверить ping на следующих хостах: www.yahoo.com, www.ukr.net, localhost :) А вот www.microsoft.com молчит. :( |
|
|
Дата: Мар 25, 2003 09:53:52 спасибо, у меня все заработало |
|
|
Дата: Мар 25, 2003 13:06:11 Можно и мне исходник :) ign@e-mail.ru |
|
|
Дата: Мар 29, 2003 22:54:45 Можно и мне исходник :) Можно, но... ign@e-mail.ru не отвечает :( Если ещё нужен исходник, пишите прямо на мой мыл (cpp_master@ukr.net) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.068 |