捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
一个高手写的PING的类
关键字:ping 类 函数
来 自:原创
平 台:Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:中级 完成时间:2008/3/20
发布者:hackering 发布时间:2008/3/21
编辑器:DELPHI7 语  种:简体中文
分 类:网络 下载浏览:6871/15012
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
主要是一个实现PING的类
我修改了部分代码。
==========
unit ping; 

interface

uses 

Windows, SysUtils, Classes,  Controls, Winsock, 
StdCtrls;

function pingip(ip:string):string;

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;

function pingip(ip:string):string;
var
str:string;
ping:Tping;
begin
ping:=Tping.create ;//一定要初试化哦
ping.pinghost('127.0.0.1',str);
result:=str;
ping.destroy ;
end;


end.
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论9条 当前显示最后6条评论
zhenlong 2008/3/22 20:14:30
只要会写就是高手,关键是多高的问题.
huw 2008/3/24 10:19:37
ping 出来的IP和自己机器的IP不一样~!
它是PING的什么地址?
huhuc 2008/3/26 11:10:09
都是从Tobject继承的啦,destroy和free差不多,只要不要2次destroy就好了。不过这个类封装的太死,只是一个演示,实用的话一般用Indy。
aerobull 2008/3/27 9:14:58
一般般了。
wangpingdejiejie 2008/4/18 17:58:58
如果这也叫高手,那我是大师了
mwy654321 2008/5/6 9:11:50
这个Ping怎么和Dos中的Ping不一样呢?它Ping出来的是什么?20和后面的0是什么意思?
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表