zoukankan      html  css  js  c++  java
  • Delphi通过ICMP检测与远程主机连接

    { ping IP 地址(返回false or true) 2015-03-23}
    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';                                 //send   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:=500;
      try
        Result:=IcmpSendEcho(hICMP, FIPAddress,pReqData,
        Length(MyString),nil,pIPE,BufferSize,FTimeOut)>0;
      finally
        IcmpCloseHandle(hICMP);
        FreeLibrary(hICMPdll);
        FreeMem(pRevData);
        FreeMem(pIPE);
      end;
    end;
  • 相关阅读:
    pip遇见的format问题
    opencv配置
    WPF学习笔记2
    WPF笔记1 用VS2015创建WPF程序
    C#基础知识
    电脑中毒了。
    感觉又学到了不少,在这里写下来,但也有一个问题,不知道是为甚吗?
    通过对HTML有一定的了解后,现在我开始学HTML DOM了。
    此情可待成追忆,只是当时已惘然。
    常用PS快捷键
  • 原文地址:https://www.cnblogs.com/tc310/p/4359887.html
Copyright © 2011-2022 走看看