ITPub博客

首页 > 应用开发 > IT综合 > ping 功能

ping 功能

IT综合 作者:niuchao 时间:2019-06-26 12:21:06 0 删除 编辑
uses Winsock;

function PingHost(HostIP: String): Boolean;
type
      PIPOptionInformation =  ^TIPOptionInformation;
      TIPOptionInformation = packed   record
                                                TTL:Byte;
                                                TOS:Byte;
                                                Flags:Byte;
                                                OptionsSize:Byte;
                                                OptionsData:PChar;
                                                end;


          PIcmpEchoReply= ^TIcmpEchoReply;
          TIcmpEchoReply = packed   record
                                        Address: 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;
var
        hICMP:THandle;
        hICMPdll:THandle;
        IcmpCreateFile:TIcmpCreateFile;
        IcmpCloseHandle:TIcmpCloseHandle;
        IcmpSendEcho:TIcmpSendEcho;
        pIPE:PIcmpEchoReply;//   ICMP   Echo   reply   buffer
        FIPAddress: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';                                 //end   data   buffer
        pReqData:=PChar(MyString);


        FSize:=40;                                                 //receive   data   buffer
        BufferSize:=SizeOf(TICMPEchoReply)+FSize;
        GetMem(pIPE,BufferSize);
        FillChar(pIPE^,SizeOf(pIPE^), 0);
        GetMem(pRevData,FSize);
        pIPE^.Data:=pRevData;
        FTimeOut:=4000;
        try
            Result:=IcmpSendEcho(hICMP, FIPAddress,pReqData,
              Length(MyString),nil,pIPE,BufferSize,FTimeOut)>0;
        finally
            IcmpCloseHandle(hICMP);
            FreeLibrary(hICMPdll);
            FreeMem(pRevData);
            FreeMem(pIPE);
        end;
end;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/166523/viewspace-1063489/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2004-11-04

  • 博文量
    141
  • 访问量
    136177