Привет всем. Я использовал пример, который был в Delphiworld, ноу меня всё равно не получается, вообщем нужно сделать пинг и вывести результаты, я сейчас просто пробовал вывести хоть какой-нибудь результата, но ничо не получается, во привожу процедуру, которая пингует:
| Код | procedure do_ping(ResultEditCh:TCompS;hostt:string);stdcall; var WSAData:TWSAData; Retorno:integer; dwRetorno :DWORD; x :integer; icmp :icmpecho; hndFile :integer; Host :PHostEnt; Addr :in_addr; Endereco :^DWORD; Destino :in_addr;
IP : ipinfo;
HNDicmp:HWND;
IcmpCreateFile : TIcmpCreateFile; IcmpCloseHandle : TIcmpCloseHandle; IcmpSendEcho : TIcmpSendEcho; begin if Length(hostt)<=0 then begin ResultEditCh(6,0,''); ResultEditCh(1,0,'Îøèáêà. Âû íå õîñò äëÿ ïèíãà.'); end; HNDicmp:=LoadLibrary('icmp.dll'); if HNDicmp=0 then begin ResultEditCh(6,0,''); ResultEditCh(1,0,'Íå óäàëîñü çàãððóçèòü icmp.dll.'); exit; end; //ïîëó÷àåì àäðåñà ôóíêöèé â áèáëèîòåêå icmp.dll @IcmpCreateFile:=GetProcAddress(HNDicmp,'IcmpCreateFile'); @IcmpCloseHandle:=GetProcAddress(HNDicmp,'IcmpCloseHandle'); @IcmpSendEcho:=GetProcAddress(HNDicmp,'IcmpSendEcho'); if (@IcmpCreateFile=nil) or (@IcmpClosehandle=nil) or (@IcmpSendEcho=nil) then begin ResultEditCh(6,0,''); ResultEditCh(1,0,'Ïðîáëåìû ñ áèáëèîòåêîé icmp.dll. Îáðàòèòåñü ê ðàçðîáîò÷èêàì!'); FreeLibrary(HNDicmp); exit; end;
Retorno:=WSAStartup($0101,WSAData); if (Retorno<>0) then begin ResultEditCh(6,0,''); ResultEditCh(1,0,'Íå óäàëîñü çàãðóçèòü Windows Sockets.'); FreeLibrary(HNDicmp); exit; end; ResultEditCh(3,0,''); ResultEditCh(1,0,'Ïîèñê õîñòà');
Destino.S_addr := inet_addr(Pchar(hostt)); if (Destino.S_addr = 0) then Host := GetHostbyName(PChar(hostt)) else Host := GetHostbyAddr(@Destino,sizeof(in_addr), AF_INET);
if (Host=nil) then begin ResultEditCh(6,0,''); ResultEditCh(1,0,'Õîñò íå íàéäåí'); FreeLibrary(HNDicmp); exit; end;
ResultEditCh(4,0,''); ResultEditCh(1,0,'Pinging '+hostt);
Endereco := @Host.h_addr_list; HNDFile := IcmpCreateFile(); for x:=1 to 4 do begin Ip.Ttl := char(255); Ip.Tos := char(0); Ip.IPFlags := char(60); Ip.OptSize := char(10); Ip.Options := nil; dwRetorno := IcmpSendEcho(HNDFile,Endereco^,0,0,Ip,Icmp,sizeof(Icmp), DWORD(5000)); Addr.S_addr := icmp.source; ResultEditCh(5,0,''); ResultEditCh(1,0,IntToStr(icmp.RTTime)); end;
ResultEditCh(4,0,''); ResultEditCh(1,0,'Ïèíã çàêîí÷åí.'); WSACleanup; end;
|
|