• 转自大富翁 函数 procedure pinghost


    procedure pinghost(ip:string;var info:string);

    ip:目标IP地址;

    info:ping了以后产生的信息(1)或(2);

    (1)成功信息 ip 发送测试的字符数 返回时间

    (2)出错信息 Can not find host!

    使用

    uses ping;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
    str:string;
    ping:Tping;
    begin
    ping:=Tping.create ;//一定要初试化哦
    ping.pinghost('127.0.0.1',str);
    memo1.Lines.Add(str); 
    ping.destroy ;
    end;
    
    [ping.pas]
    
    (*作者:e梦缘*)
    
    unit ping;
    
    interface
    
    uses
    
    Windows, SysUtils, Classes,   Controls, Winsock,
    StdCtrls;
    
    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;
    
    Tping =class(Tobject)
    
    private
    { Private declarations }
    hICMP: THANDLE;
    IcmpCreateFile : TIcmpCreateFile;
    IcmpCloseHandle: TIcmpCloseHandle;
    IcmpSendEcho: TIcmpSendEcho;
    public
    procedure    pinghost(ip:string;var info:string);
    constructor create;
    destructor destroy;override;
    { Public declarations }
    end;
    
    var
    hICMPdll: HMODULE;
    
    implementation
    
    constructor Tping.create;
    begin
    inherited create;
    hICMPdll := LoadLibrary('icmp.dll');
    @ICMPCreateFile := GetProcAddress(hICMPdll, 'IcmpCreateFile');
    @IcmpCloseHandle := GetProcAddress(hICMPdll,'IcmpCloseHandle');
    @IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho');
    hICMP := IcmpCreateFile;
    end;
    
    destructor Tping.destroy;
    begin
    FreeLibrary(hIcmpDll);
    inherited destroy;
    end;
    
    procedure Tping.pinghost(ip:string;var info:string);
    var
    // IP Options for packet to send
    IPOpt:TIPOptionInformation;
    FIPAddress:DWORD;
    pReqData,pRevData:PChar;
    // ICMP Echo reply buffer
    pIPE:PIcmpEchoReply;
    FSize: DWORD;
    MyString:string;
    FTimeOut:DWORD;
    BufferSize:DWORD;
    begin
    
    if ip <> '' then
    begin
    FIPAddress := inet_addr(PChar(ip));
    FSize := 40;
    BufferSize := SizeOf(TICMPEchoReply) + FSize;
    GetMem(pRevData,FSize);
    GetMem(pIPE,BufferSize);
    FillChar(pIPE^, SizeOf(pIPE^), 0);
    pIPE^.Data := pRevData;
    MyString := 'Test Net - Sos Admin';
    pReqData := PChar(MyString);
    FillChar(IPOpt, Sizeof(IPOpt), 0);
    IPOpt.TTL := 64;
    FTimeOut := 4000;
    try
    IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString),@IPOpt, pIPE, BufferSize, FTimeOut);
    if pReqData^ = pIPE^.Options.OptionsData^ then
    info:=ip+ ' ' + IntToStr(pIPE^.DataSize) + '   ' +IntToStr(pIPE^.RTT);
    except
    info:='Can not find host!';
    FreeMem(pRevData);
    FreeMem(pIPE);
    Exit;
    end;
    FreeMem(pRevData);
    FreeMem(pIPE);
    end;
    
    end;
    
  • 相关阅读:
    Data Structure Binary Tree: Populate Inorder Successor for all nodes
    Data Structure Binary Tree: Connect nodes at same level using constant extra space
    Data Structure Binary Tree: Check if a given Binary Tree is SumTree
    Data Structure Binary Tree: Construct Tree from given Inorder and Preorder traversals
    Data Structure Binary Tree: Inorder Tree Traversal without recursion and without stack!
    Data Structure Binary Tree: Inorder Tree Traversal without Recursion
    Data Structure Binary Tree: How to determine if a binary tree is height-balanced?
    Data Structure Binary Tree: Diameter of a Binary Tree
    Data Structure Binary Tree: Convert an arbitrary Binary Tree to a tree that holds Children Sum Property
    【阿里云产品公测】OpenSearch初体验
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3025514.html
Copyright © 2020-2023  润新知