zoukankan      html  css  js  c++  java
  • ping指定地址

    最近用到相应功能,网上搜了下。

    感谢网友的分享,原文链接如下:http://blog.csdn.net/nanfeiyannan/article/details/6636280

    稍微更改了内容,代码如下:

    unit uPing;
    
    interface
    
    uses
      WinSock, Windows;
    
    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;
    
    function PingHost(HostIP: String): Boolean;
    
    implementation
    
    function PingHost(HostIP: String): Boolean;
    
    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: PAnsiChar;
      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(PAnsiChar(HostIP));
      MyString := 'Hello,World'; // send   data   buffer
      pReqData := PAnsiChar(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 := 1000;
      try
        Result := IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString), nil,
          pIPE, BufferSize, FTimeOut) > 0;
      finally
        IcmpCloseHandle(hICMP);
        FreeLibrary(hICMPdll);
        FreeMem(pRevData);
        FreeMem(pIPE);
      end;
    end;
    
    end.
    

     现将代码放这,有空再吃透代码。

  • 相关阅读:
    php 转化整型需要注意的地方
    生成6位随机数
    php://input
    ios常见问题 经验之谈
    ios 从前台返回到回台 从后台返回到前台 或者 支付宝支付订单后 对界面进行操作
    ios根据文本自适应 然后 搭建类似如下效果
    iosTableView 局部全部刷新以及删除编辑操作
    ios打开系统自带APP
    iOS通过URL Scheme启动app(收集了常用的app的URL Scheme)
    ios UIApplocation 中APP启动方式
  • 原文地址:https://www.cnblogs.com/BlackList-Sakura/p/5169636.html
Copyright © 2011-2022 走看看