{ ping IP 地址(返回false or true) 2015-03-23} function PingHost(HostIP: String): Boolean; typePIPOptionInformation = ^TIPOptionInformation;TIPOptionInformation = packed recordTTL:Byte;TOS:Byte;Flags:Byte;OptionsSize:Byte;OptionsData:PChar;end;PIcmpEchoReply= ^TIcmpEchoReply;TIcmpEchoReply = packed recordAddress: DWORD;Status:DWORD;RTT:DWORD;DataSize:Word;Reserved:Word;Data:Pointer;Options:TIPOptionInformation;end;TIcmpCreateFile = function:THandle;stdcall;TIcmpCloseHandle= function(IcmpHandle:THandle):Boolean;stdcall;TIcmpSendEcho=function(IcmpHandle:THandle;DestinationAddress: DWORD;RequestData: Pointer;RequestSize: Word;RequestOptions: PIPOptionInformation;ReplyBuffer: Pointer;ReplySize: DWord;Timeout: DWord):DWord;stdcall; varhICMP:THandle;hICMPdll:THandle;IcmpCreateFile:TIcmpCreateFile;IcmpCloseHandle:TIcmpCloseHandle;IcmpSendEcho:TIcmpSendEcho;pIPE:PIcmpEchoReply;// ICMP Echo reply bufferFIPAddress:DWORD;FSize:DWORD;FTimeOut:DWORD;BufferSize:DWORD;pReqData,pRevData:PChar;MyString:string; begin Result:=False;hICMPdll:=LoadLibrary('icmp.dll');if hICMPdll=0 then exit;@ICMPCreateFile:=GetProcAddress(hICMPdll,'IcmpCreateFile');@IcmpCloseHandle:=GetProcAddress(hICMPdll,'IcmpCloseHandle');@IcmpSendEcho:=GetProcAddress(hICMPdll, 'IcmpSendEcho');hICMP := IcmpCreateFile;if (hICMP=INVALID_HANDLE_VALUE) then exit;FIPAddress:=inet_addr(PChar(HostIP));MyString := 'Hello,World'; //send data bufferpReqData:=PChar(MyString);FSize:=40; //receive data bufferBufferSize:=SizeOf(TICMPEchoReply)+FSize;GetMem(pIPE,BufferSize); FillChar(pIPE^,SizeOf(pIPE^), 0);GetMem(pRevData,FSize);pIPE^.Data:=pRevData;FTimeOut:=500;tryResult:=IcmpSendEcho(hICMP, FIPAddress,pReqData,Length(MyString),nil,pIPE,BufferSize,FTimeOut)>0;finallyIcmpCloseHandle(hICMP);FreeLibrary(hICMPdll);FreeMem(pRevData);FreeMem(pIPE);end; end;