局域网网络通道实时监控程序
业§ :i!
S CIENCE&IECHNOLO0YNFORM^1 ON
局域网网络通道实时监控程序
王志东
(江阴市供电公司电力调度中心信息组214400)
学术论坛
摘要:通过本程序,我们可以实时有效的监控局域网网络通道的通断情况,简单判断故障原因,这给我们网络管理员带来了很大
方便,使我们能够即时去发现问题,解决问题,缩短了故障时间,很大的提高了网络运行效率.
关键词:丢包率网络通道实时监摔
中图分类号:TP31文献标识码:A文章编号:l672—379l(2006)11(a)02l0—031前言
目前,在我们电力行业,我们的很多工
作都越来越依赖于网络,一旦网络发生故障,
很多工作就无法开展,甚至处于停顿,为了能
够及时的处理好故障,这就要求我们能够实
时地去知道网络通道的情况.但是有很多地
方还没有网络通道实时监控的手段,只能被
动的去扫描通道或者等着哪个区域网络断掉
后报到信息中心,我们才能知道某区域网络
断了,这给我们网络维护人员带来了很大不
便,同时也浪费了很多宝贵的时间.尤其是县
级供电公司,没有专用资金去购买测试产品,
像一套好的福录克f1 uke网络测试仪需要10
多万,这就要求我们要有一套简便迅速的实时监测手段来主动地去判断网络通道的情况,这样我们就能够迅速的去发现问题,解决问题,缩短故障的时间,也大大提高了网络运行的效率.
鉴于此情况,我研究了一些dos命令的特征以及相关技术文献,以a s p为依托,dr e amwe av e为框架,编写了一套网络测试程序来达到实时监控的目的,此程序目前已在运行中2正文
课题确立了,究竟通过什么方法来实现
呢?这又成了一个难题.
一
般,我们要知道一个网络通道通不
通,只要知道对方一台机器或者交换机的地址,然后用ping命令ping一下就可以知道了.但是我们是直接看到ping的结果才知道网络通不通的,那怎么样让程序来自动判断呢?如果能把ping的结果保存为一个文件,那我就可以通过去读那个文件来知道结果了.这时候我查找了ping命令的相关资料,知道有个">"
命令符,可以把ping的结果保存到txt
文档中.例如:pinga 172.26.64.10>d:\newwebs\ping\64.10.txt这样我就
把ping的结果保存到了D:\new—webs\ping文件夹的64.10.txt这个文档中了.分析txt文件中的数据可以看出,我们只要读取
"0%"这个丢包率,就知道这次Ping的结
果没有丢包,也就是说网络是正常的.保l仔是保存了下来,那怎么样来让程序读取txt中丢包率这个数据呢?这又成了目前要克服的难题.
为了解决这个问题,我查阅r相关书籍,找到在asP中,有一个FS0(FileSYstemObject),即文件系统对象,和TextSystemObject文本流对象.
从这两个对象的使用方法中我们可以看到,如果先使用FileSystemObject对象的0penTextFile方法就能够打开64.10.txt的文本文件,然后生成了一个Text Stre am文本流对象,接着使用TextStream的TextStream.readall0方法,就能够读取64.10.txt文本的内容了,然后我们可以在文本流里去匹配"(,"%"这两个字符,这样我们就可以读取"0%"的丢包率了.当然首先得创建一个FileSystemObject对象:
Setfs-Server.CreateObj ect("Scripting.
FileSystemObject")
然后打开64.10.txt文件:
SetTextFile=fs.0penTextFile("d:\newweb s\ping\64.10.txt",1)
接着读取文本流:TextBuffer=TextFile.
ReadAll然后去匹配"(","%"这两个关键字符,因为看到文本里面只有一个"("和"%"字符,所以只要用for循环匹配到第一个就可以了,而"("总是在"%"前面,所以可以使用嵌套for循环,在第一个for循环匹配到"("
这个字符后,在从这个字符开始匹配"%"字符,这样就可以节省很多匹配的时间.
Fori=1 toLen(TextBuffer)
IfMid(TextBuffer,i,1)="("Thenforj=itoLen(TextBuffer)
IfMid(TextBuffer,j,1)=chr(37)thentl:Mid(TextBuffer,i+l,ji 1)
EndIfnext
EndIf
Next
这里面len是取字符串长度的函数,而mid是取字符的函数,chr(37)是%的Assic码,tl这个变量就是读出来的丢包率的参数了.这样通过ping命令读取丢包率的方法来判断通道情况的几个难点都解决了,似乎这个监控程序就可以完成了?其实不然,越往下深入,发现还有很多问题要解决.
还有就是怎么来调用DOS的ping命令来让它自动执行?同时为了把丢包率的历史纪录保存下来,方便以后查询,我们还应该把读出来的丢包率数据存储到数据库中.这里就不得不说一下Wscript.SheH对象了,Wscript.SheH对象有很多属性和方法,我们主要用到它的Run()方法,下面详细介绍
一
下该方法的使用,其语法如下:
Wshshel 1.Run(srtcommand.
【intWindow Stylel,lblnWaitOnReturn])
Run方法创建一个新的进程,该进程以intWindow Styl e窗口样式执行strC ommand.
参数strC ommand:在strC ommand参数
内部的环境变量被自动扩展.
参数intWindow Style:这是为新进程在
210科技资讯S C IENCE&fECHNO[O GYINF ORMAfIONSTARTUPINF0结构内设置的wShow
Window元素的值.其意义与ShowWindow
中的nCmdShow参数相同.
参数blnwaitOnReturn:如果未指定blnWaitOnRetum或其值为FALSE,则该方
法立即返回到脚本继续执行而不等待进程结
束,若binWaitOnReturn设为TRUE,则
Run方法返回由应用程序返回的任何错误代
码,如果未指定blnWaitOnReturn或其值为
FALS E,则Run返回错误代码0.
现在就是要使用Wsh调用系统的Ping命
令,通过fso文件系统组建创建临时文件,
再将Ping的结果重定向到这个文本文件中
去.然后再通过fso文件系统对象和文本流
对象TextStream读取丢包率数据,最后就
是把数据录入数据库.
首先,新建一个批处理文件c.b at,这个
文件将被asP调用.该文件代码如下:
Ping—a 172.2664.10>d:\new—webs\ping\64l0.txt
64.10.txt是存储ping结果的文件,
再编写Ping.ASP文件,代码如下:
SetWShSheU=Server.CreateObj ect
("WScript.Shell")
RetCode=WShShel1.Run("d:\newwebs\ping\c.Bat",1,True)
运行ping.asp文件后,它就会自动执行bat文件中的ping命令了,而且会把结果存储到64.10.txt文本中.
这样把上面打开文件的代码和读取丢包率数据的代码加到ping.asp的页面中,一个最简单的完整流程就出来了,
不过这只是可以监测一个交换机的情况,而像我们公司的主干网有很多的交换机组成,那么以我们公司为例,我们的主干交换机主要有调度大楼的楼层交换机,11个220KV变电所的交换机,西郊生产区,29个乡镇的区域城网交换机,只要让程序不断的去ping这些主干交换机的ip地址,得到相关的丢包率信息,就可以实时的了解当地当时的网络情况.为此,在设计c.b at批处理文件时,就要考虑设置多条ping命令的代码,这里我设置了27个主干网络交换机的ping命令,以及一个测试ip地址,这个利用上述方法,我们同样可得到28个丢包率参数,t 1,t2. . .t28.同时设置ping.asp这个程序每10秒钟自动刷新执行一次,代码如下:
<METAhttpequiv—REFRE SHcontent=10urlping.asp>
或者<bodyon]oad"setTimeout(this.
1 ocation.reload()#,l0);">
那么执行ping.asp这个程序加上l0秒的
学术论坛S CIENCK&TECHNOLOOYINFORMA—TIO~2006NO31刷新时间,平均每3分钟我们可以得到tlt28这28个参数的一次数据,也就是说程
序每3分钟向网络中自动进行扫描一次,判
断主干网络的情况.
这里不得不说一下在执行ping.asp时候
的一个要点,就是网页执行的限制超时问
题,一般网页默认的限制超时时间为90秒,
就是说一个网页如果90秒没有执行完成,系
统就会认为它超时了,那样就不会继续执行
了.所以我们必须要修改这个限制超时的时
间.我们的程序执行差不多是3分钟,为了
保险起见,我们可以设成300秒,5分钟那
就没问题了.
代码如下:
<%Server.SeriptTimeOut=300%>
到这里这个程序的难点要点基本上就都
解决了,我们可以顺着思路去完善这个程序
了.
下面创建一个ping.mdb的数据库,创
建一个loss表,设立30个字段:id(自动
编号),riqi(日期/时间),t 1…t28(文
本),这个表就是用来存放28个丢包率参数
的数据以及当时的时间的,这样做的好处就
是方便我们以后查询这些历史数据.数据库
表1
建好了,数据也去出来了,那么可以把数据
存到数据库中去了,我们在ping.asp的代码
后面加上如下代码就可以了:tt=n o w()
setrs=server.CreateObj ectflladodb.recordset")sql="insertintoloss(riqi,tl…)values
(¨ '&tt&"',l l'&tl&"…)"Setrs=conn.Execute(sq 1)
数据录入后我们就可以通过这些最新的数据去判断网络当时的状况了.接下来,我们就要设计读取数据库,以及表现当时网络状况的页面了.我们设为index.asp.
读取数据比较简单,只要执行如下sql代码就可以了:sql='selectfromlosswhereriqi=
(selectmax(riqi)fromloss)"
这样我们每次取出的都是最新的数据.另外设一个数组变量t(28),把tl—t28的数据都存到数组t(1)-t(28)里.
数据读取出来后,我们就要考虑它的表现形式了,就是我们根据这些数据怎么样来形象化的表现当时网络的状态?从数据特征可以看出,ping的时候只有四条ping语句,所以这个数据只有0,25,50,75,l00
五种形式,当然你要让它多ping几条也可以,只要在c.bat里面的ping代码加上一nl0,这样程序就会pingl0条了.这里我们就用这四条的五种形式来表示吧.0丢包率就表示网络畅通;25丢包率就是四条中丢了一条,需要注意;50的丢包率就要特别注意了,网络虽然还是通的,但是肯定有异常了;75这个丢包率就表示网络物理上还是通
的,但是已经不能传送大数据包了,想当于
已经断了;100就表示完全断了.然后我只
做了两张gif图片:表示网络正常;●表示
网络异常.丢包率为0,那么就是网络正
常,显示;而丢包率为25,50,75,l00,则表示网络异常,显示●.那么在
25,50,75,l00之间怎么来区分他们的
状态等级呢?25呢需要网管注意一下,就用
●表示提醒就可以了;50呢需要特别注意
了,还要查看一下是个别现象还是一直这
样,那么在用红点表示的时候,我还增加了
一
个信使服务告警,同样制作一个b.b at文
件,里面写上这样的代码:netsend172.26.64.183发现网络异
常!请迅速查看!lla005-7-25#}Ml22蠢墟慵况l孵艘{状啦基包翠謦备螭剐}鲁洼嘲般I状撤骤憾攀}I蒋龋捌l啊}蝴l搠《黪}o{lI,2.2.矾.1o矾搬I
奠O魁1窘.25.50l4.11l
捌老嗡llo,12?23*l28?I陵搬l_■100一1蒲.2e.206l2_.l0.liIT2.掘帆?29;l{冀{垮懈i………l2l-曩{0-{172?2瓢"?31{}-埘辩露10lI窘?2e?墨T-2I一
12o"{o-{ll,2?2064?22{辩Itlil100-lI72?25?eT-212l1卅li0-{1lT2.25?64.32}幕a孵潞10*lI,2e?eT-215l硼Il 《穆{0-l}I72?25矾.34}-f;向蹙堪OlI'2?2e?87lt
1T|警
一lo●{IlT2?25.54.23硅孵黪O*lI2-.e.5713
1础
buyvm的第四个数据中心上线了,位于美国东南沿海的迈阿密市。迈阿密的VPS依旧和buyvm其他机房的一样,KVM虚拟,Ryzen 9 3900x、DDR4、NVMe、1Gbps带宽、不限流量。目前还没有看见buyvm上架迈阿密的block storage,估计不久也会有的。 官方网站:https://my.frantech.ca/cart.php?gid=48 加密货币、信用卡、PayPal、...
zoecloud怎么样?zoecloud是一家国人商家,5月成立,暂时主要提供香港BGP KVM VPS,线路为AS41378,并有首发永久8折优惠:HKBGP20OFF。目前,解锁香港区 Netflix、Youtube Premium ,但不保证一直解锁,谢绝以不是原生 IP 理由退款。不保证中国大陆连接速度,建议移动中转使用,配合广州移动食用效果更佳。点击进入:zoecloud官方网站地址zo...
物语云计算怎么样?物语云计算(MonogatariCloud)是一家成立于2016年的老牌国人商家,主营国内游戏高防独服业务,拥有多家机房资源,产品质量过硬,颇有一定口碑。本次带来的是特惠活动为美国洛杉矶Cera机房的不限流量大带宽VPS,去程直连回程4837,支持免费安装Windows系统。值得注意的是,物语云采用的虚拟化技术为Hyper-v,因此并不会超售超开。一、物语云官网点击此处进入物语云...