vb 验证网络

引用:http://school.cfan.com.cn/soft/sys/2006-08-18/1155878337d13185.shtml

  

前言
常言道,攘外必先安内,服务器的正常运作,是开展一切工作的基础。而在网络安全问题日益凸现的今天,监控服务器的健康状况成了管理人员的必修课。然而,通过手工操作效率过于低下。想到骇客帝国中帅呆了的Agent史密斯,其本质就是一个高级的软件机器人,那么我们能不能编写一套程序,让程序就像Agent史密斯一样自动去监视服务器的健康状况,一旦发现问题就自动通知我们呢?
要编写这么一个软件机器人,我们只要通过程序定时测试网站是否正常运行即可。其实原理并不复杂,因为用Inet控件去抓取一个Url地址时,如果地址是无法访问的,Inet控件所返回的值的长度是0。如果用循环和数组,程序还能同时监测多个网址。此外,还可以用Dir函数、Windows Script Host对象等实现从收藏夹中导入链接,使软件操作更加友善。
程序设计
以下便是笔者用Visual Basic 6编写的网站监视软件。程序需要5个按钮,作用分别是:开始监视、结束监视、添加Text1中的网址至监视列表、从监视列表中移除网址和从收藏夹列表中添加网址到监视列表;一个Inet控件(需要从工程-部件中选择),RequestTimeout设置为15(请依据个人网速设置,建议大于15);三个Listbox分别为:记录监视记录、待监视网址列表、显示收藏夹中的链接列表;两个Text框分别为:用户输入网址、显示List2中选中网址的监视信息;一个Timer控件,Enabled设置为False,Interval设置为1000。
篇幅限制,下面只列出核心代码:
Private Sub Form_Load()  'Form加载时读取收藏夹中的链接
Dim sA As String * 65400
Dim sfile As String
Dim fpath As New IWshRuntimeLibrary.WshShell
sfile = Dir(fpath.SpecialFolders("FAVORITES") & "\") '用Windows Script Host对象获得当前收藏夹位置
Do While Not Len(sfile) = 0
If UCase(Right(sfile, 4)) = ".URL" Then
Open fpath.SpecialFolders("FAVORITES") & "\" & sfile For Binary As #1 '注释:用二进制打开文件
Get #1, , sA '注释:用Get语句从文件中获取字节
xz = Split(sA, Chr(10))  '以回车作为标志分割URL中文本
For i = 0 To UBound(xz)
If UCase(Left(xz(i), 4)) = "URL=" Then  '符合格式时得到Url
List3.AddItem Right(xz(i), Len(xz(i)) - 4)
End If
Next i
Close #1 '注释:关闭文件
End If
sfile = Dir
Loop
End Sub

Private Sub Timer1_Timer() '启动监视的时候Timer执行
On Error Resume Next  '先忽略一切错误,为了能够让程序执行下去
If Inet1.StillExecuting Then Inet1.Cancel
For i = 0 To List2.ListCount - 1 '循环次数等于列表中待监测链接数
val = 0
val = Len(Inet1.OpenURL(List2.List(i)))   '网址返回的长度
If val = 0 Then     'Inet返回值的长度为零,则记录无法访问
List1.AddItem (Now & Space(6) & List2.List(i) & Space(6) & "×")
c2(i) = c2(i) + 1   '不能访问计数+1
Else
List1.AddItem (Now & Space(6) & List2.List(i) & Space(6) & "√") '反之,记录可以访问
c1(i) = c1(i) + 1   '能访问计数+1
End If
Next i
List1.AddItem Chr(10)
If List2.SelCount > 0 Then    '在Text2中显示监测结果
Text2.Text = "当前统计信息:" & Chr(10) & List2.List(List2.ListIndex) & Space(6) & "正常访问:" & c1(List2.ListIndex) & "次" & Space(6) & "不能访问:" & c2(List2.ListIndex) & "次"
End If
End Sub
注意到本文通过Timer控件与Inet控件的结合非常巧妙地模仿了多线程的机制,程序反应速度非常快,如图所示就是程序运行的界面。

需要注意的是,不同网站访问速度不同,按本文方法,只有被测网址在Inet的RequestTimeout时间内刷新完才记录正常访问,如果网速过慢,需加大RequestTimeout的值(只要不要超过Timer的Interval时间),否则软件机器人会出现误报。
后记
本文通过VB自带的Inet控件以及简单的循环便实现了一个非常实用的软件机器人,服务器的任何问题都逃不过它的眼睛。如果对于Inet控件返回的内容加以判断,还可以开发出能够监视网络连载故事是否更新的软件机器人。此外,验证自己购买的虚拟主机是否真的有如广告说的那样不间断服务,对于我们的软件机器人而言,绝对是小菜一碟。
本程序在VB6.0、Windows XP联网状态下调试通过。完整的源代码可以从http://www.cfan.com.cn/11program/200514/agent.zip下载

posted @ 2011-12-08 10:39  镇水古月  阅读(379)  评论(0编辑  收藏  举报