日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Delphi中PING的實(shí)現(xiàn)

 fjwolf 2009-03-19
Delphi中PING的實(shí)現(xiàn)
2008-08-08 20:09

調(diào)用: Uses Ping;

procedure TForm1.Button1Click(Sender:TObject);
var
str:string;
ping:Tping;
begin
ping := Tping.create; //一定要初試化哦
ping.pinghost('192.168.1.152', str);
memo1.Lines.Add(str);
if str = 'Can not find host!' then ShowMessage('該主機(jī)當(dāng)前不在線!');
ping.destroy;
end;

====[ping.pas]=====

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 := 100;
    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;

end.


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多