当要检测的IP比较少时,我们一般直接使用DOS命令Ping来实现。但是,如果我们要检测的IP比较多时(比如一个网段),再用Ping命令就比较繁琐了,即使写一个批处理来实现,大把数据看起来也让人恼火。这里,我们用Delphi实现对批量IP的检测,检测结果用明了的图形显示,效果如下: |
|
程序效果图 |
如上图,我们实现了对10.45.129.1到10.45.129.20这20个IP的检测,如果不可以Ping通,就用一个红色的感叹号表示。是不是简单明了?现在我们就来实现。 |
一:程序实现 |
在这个程序中,我们用TreeView来表示检测的IP结果;用ICS控件组的Ping控件来实现对IP的检测。 |
一)Ping功能的实现 |
为了实现Ping功能,我们在ICS的Ping控件基础上写一个函数,函数结果表示IP是否可以Ping通,如果可以,结果为True,反之,为False。函数如下: |
//函数Ping |
//使用了ICS的Ping控件 |
Function TMainForm.Ping(strip:string):Boolean; |
Begin |
//IP地址 |
ping1.address:=Trim(strip); |
Ping1.ping; |
//结果 |
if ping1.ErrorCode=0 then |
begin |
ping:=True; |
end |
Else |
Begin |
ping:=False; |
//如果不能Ping通,i加一; |
i:=i+1; |
End; |
End; |
函数说明: |
参数strip:要检测的ip; |
变量i:如果不能Ping通,i加一(注意:I定义为一个全局变量); |
二)控件说明 |
程序中使用控件的属性功能如下: |
|
三)程序代码 |
主要代码部分如下: |
var |
MainForm: TMainForm; |
//i记录不能Ping通的总数; |
i:Integer; |
implementation |
{$R *.DFM} |
Function TMainForm.Ping(strip:string):Boolean; |
Begin |
ping1.address:=Trim(strip); |
Ping1.ping; |
if ping1.ErrorCode=0 then |
begin |
ping:=True; |
end |
Else |
Begin |
ping:=False; |
i:=i+1; |
End; |
End; |
procedure TMainForm.Button1Click(Sender: TObject); |
Var |
h:Integer; |
treenode1,treenode2:TTreeNode; |
begin |
//清空所有Item; |
TreeView1.Items.Clear; |
With TreeView1.Items Do |
Begin |
//增加根接点; |
TreeNode1:=Add(nil, '批量IP检测'); |
//全部展开所有结点 |
TreeView1.FullExpand; |
//刷新TreeView |
TreeView1.Refresh; |
//根结点图标 |
TreeNode1.ImageIndex:=0; |
TreeNode1.SelectedIndex:=0; |
//二级接点 |
For h:=StrToInt(Trim(Edit2.Text)) To StrToInt(Trim(Edit3.Text)) Do |
Begin |
if ping(Trim(Edit1.Text)+'.'+Trim(IntToStr(h)))=True Then |
Begin |
//如果可以Ping通,图标为0; |
TreeNode2:=AddChild(TreeNode1,Trim(Edit1.Text)+'.'+IntToStr(h)); |
TreeNode2.ImageIndex:=0; |
TreeNode2.SelectedIndex:=0; |
//全部展开所有结点 |
TreeView1.FullExpand; |
//刷新TreeView |
TreeView1.Refresh; |
End |
Else |
Begin |
//如果不能Ping通,图标为1 |
TreeNode2:=AddChild(TreeNode1,Trim(Edit1.Text)+'.'+IntToStr(h)); |
TreeNode2.ImageIndex:=1; |
TreeNode2.SelectedIndex:=1; |
//全部展开所有结点 |
TreeView1.FullExpand; |
//刷新TreeView |
TreeView1.Refresh; |
End; |
End; |
h:=h+1; |
End; |
Label4.Caption:='检测结果:'+IntToStr(i)+' 个IP不能Ping通'; |
Application.MessageBox('检测结束','提示',0); |
End; |
二:程序说明 |
一) 以上程序可以实现对一个网段的检测,具体到应用,可以将要检测的IP放入数据库,同时用文字说明IP对应的机构或者计算机。检测时,直接读取数据库记录,将检测结果和数据库中的IP说明相结合,使结果直接具体到计算机名; |
二) ICS控间组的Ping控件功能很强,这里只是使用了它的最基本的一个功能,具体应用中,建议更多使用Ping控件的其他属性和功能,比如检测响应时间(ReplyTime)来检测IP状态是否良好。 |
三) 请勿用以上程序随意实验,以免浪费网络资源; |
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.036764860153198 seconds