欢迎来到学术参考网

一种基于Windows API网络监测系统的设计与实现

发布时间:2015-09-12 09:30

摘 要:设计了一种网络检测系统,基于Windows API实现。克服了基于SNMP的网络管理程序的缺点,并满足了网管人员的需求。通过测试,系统具有部署简单、易于使用等优点,达到了实际应用的要求。

关键词:Windows API;ICMP;控件自绘

前言
  随着现代文明的发展,人类对于信息的依赖程度越来越高。不论教育、医疗、军事、工业以至生活的各个层面及时的获取信息都已经成为了得以立足的关键。以太网传输技术是信息传输技术的重要组成部分,以太网经过几十年的发展,已经根植于人们工作生活的各个领域,到2011年为止,中国的网民数量已经超过了6亿人,可以想象网络稳定、无故障的运行将会产生多大的影响。网络管理系统便是在这样的背景之下产生的。
  现在市场上多数网络管理系统都是基于SNMP协议开发的。这种系统的优点为功能全面,不但可以获取所管理设备的各类参数指标,而且具有管理控制功能。但事物总是辩证的,在拥有SNMP协议带来的诸多优势的同时,SNMP协议也存在着多方面的不足,存在诸如协议相关知识庞杂、不利于学习、网络产品MIB库不兼容、系统部署难度大等缺点。
  对于网络设备的CPU、内存利用率或者设备负载这类的信息,一般的网络管理员并不关心,他们更关心的是关键节点、设备是否可达(正常在线)以及网络管理系统是否易于部署使用等。
  在网络故障诊断过程中,网管员通常用到的不是功能强大的SNMP网络管理系统,而是Windows操作系统自带的及其简单的网络调试命令,如ping、tracert、arp等,利用这些简单的命令,网管人员就可以判断网络中的大多数问题。但这些命令也有缺点,如结果不直观、只能对单个节点进行测试、不适合长时间检测等问题。
  如果有一种网络检测系统能够直观且方便的提供Windows网络调试命令提供的功能,那将是一种十分理想的解决方案。实际上Windows操作系统早已为我们准备好了这些功能,这就是Windows API。
  本文论述的基于Windows API的网络检测系统就是基于上文所述的原因开发的。系统具有小巧、直观、易于部署使用等特点。在网络值班的实际应用中,满足了网络管理人员的实际需求。
1.系统需求分析
(1)可以同时监控多个节点
  系统可以同时对所用关心的设备进行监控。
(2)可以及时发现网络故障
  对于出现故障的设备能够及时发现,一般要求在数秒之内。这就意味着系统采用的算法的判断过程必须及时有效。
(3) 监测结果直观易懂
  采取多媒体方式反映监测结果,监测对象状态发生改变后可采取图像、声音提示、弹出对话框等多种形式。
(4)低误报率或无误报
  网络状态并不是简单的通畅与阻断两种状态,不能仅通过网络检测中的一次丢包就判断网络阻断。
(5)监测的历史记录可查
  具有对检测结果的记录功能,便于对一段时间之内的网络状况进行统计、总结。
(6)对特定节点可查询其网络详细信息
  对于需要特别关注的网络节点可以对其网络状况进行查询,如网络延迟。
2.关键技术
2.1 Windows API
  对于Windows API在MSDN中是这样描述的:微软Windows应用程序接口为应用程序提供了发掘Windows操作系统强大功能的能力。利用Windows API ,可以使你开发的应用程序在各个版本的Windows下正常运行并同时具有各版Windows的相应优势。
  换句话说Windows操作系统已经为程序员提供了一系列的具有各种系统功能的函数。开发相应功能的应用程序不再需要书写大量代码来实现功能,只需理解相应的API函数,在开发程序时调用相应函数即可。这在很大程度上减轻了程序开发者的负担。在开发网络检测程序时这一点同样适用。
2.2 多线程
  说到线程,必提的就是进程,当我们执行硬盘中的可执行文件时,操作系统会把文件映射到内存当中,这个内存中的可执行文件就是进程。进程本身是不具有执行代码能力的,真正负责执行程序代码的是线程,线程是操作系统分配处理器时间的基本单元。每个进程都至少拥有一个线程来完成他的相应工作。
  对于每一个线程来说,他在某一时刻只能处理一项任务,而在网络监测过程中,系统需要在同一时间内监测多个节点。这就需要系统创建多个线程,每个线程负责监测不同的节点。
2.3 控件的自绘
  在与操作人员交互方面,系统需要达到简易、直观的效果,经过分析ListControl具有可同时显示多行多列信息的能力,基本满足监测显示的要求,但ListBox存在两点不足:
  (1) ListControl不能按照单元格设置背景颜色,而理想的显示方法为根据不同节点的状态显示不同的颜色。
  (2)ListControl的行高不可调整,仅留有字体的显示空间,直接用于监测的显示带来杂乱、拥挤的感觉。
  以上不足需要通过控件的自绘来解决。
 自绘ListControl控件关键代码:
ColorListCtrl.h头文件
class CColorListCtrl : public ClistCtrl  //继承自ClistCtrl
{
//与改变行高及单元格背景色无关的其他代码不在此列出
 ……
 int m_nItemHeight;  //单元格高度
CMyLParam* GetMyLParam(int Index);  //自定义CMyLParam类的对象,用于获取与设置ListControl内部单元格的颜色等属性,
public:
  void SetItemHeight(UINT nHeight);   //用于设置ListControl的行高
BOOL SetItemBackgndColor(COLORREF color, int Index, int iSub);   //用于设置ListControl单元格的背景色
 ……
};

BOOL CColorListCtrl::SetItemBackgndColor(COLORREF color, int Index, int iSub) 
{
    CMyLParam *p=GetMyLParam(Index);  //获取第Index+1行的属性
    if (!p) return FALSE;
    if ( p->SetBackColor(color, iSub) )  //设置第iSub+1列的颜色为color
    {
        RedrawItems( Index, Index );  //重绘第Index+1行的第iSub+1列
        return TRUE;
    }
    return FALSE;
}

void CColorListCtrl::SetItemHeight(UINT nHeight)
{
 m_nItemHeight = nHeight;  //设置新单元格高度
 CRect rcWin;
 GetWindowRect(&rcWin);
 WINDOWPOS wp;  //建立WINDOWPOS结构体对象用于保存窗口原有属性
  = m_hWnd;
  = ();
  = ();
  = SWP_NOACTIVATE SWP_NOMOVE SWP_NOOWNERZORDER SWP_NOZORDER;
SendMessage(WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp);  //发送WM_WINDOWPOSCHANGED消息,引起窗口重绘
}
2.4 ICMP
    ICMP是“Internet Control Message Protocol”的缩写。此协议工作在OSI模型 的网络层,是TCP/IP协议族的子协议。ICMP协议用于在IP主机、路由器之间传递控制消息。包括网络是否通畅、主机是否可达、路由是否可用等网络消息。Windows系统中的ping命令即是通过发送ICMP包判断网络状态。
    程序开发中用的的一个很重要的Windows API就是IcmpSendEcho2,利用这个API即可发送ICMP包,并通过他的返回值判断网络状态。当然在利用API时是要进行一些辅助工作的,诸如初始化变量。
2.5 状态判断算法
  简单来说IcmpSendEcho2的返回值就只有通畅、中断两种。实际应用中网络会因各种原因出现丢包现象。这说明通过对单个IcmpSendEcho2返回值的判断并不能正确反应网络的状态,但这个返回值是我们进行判断的重要依据。这就需要一种算法来具体分析网络状态。整个算法不但需要准确而且不能过于复杂。
  算法对网络的运行状况分为四个级别:1.良好、2.一般、3.较差、4、中断。而级别的评估是通过每个节点的得分确定的,得分分为13的等级,最高为0最低为12。算法在每次ICMP丢包的情况下分数加1,相反每次得到响应则分数减1。
  比较特殊的两种情况:
  (1)当对某一节点进行第一次测试时,若得到响应则直接赋予最高分数0,若无响应则赋予分数4(等级2的最高分)。
  (2)当节点分数为7至12时,若得到响应则赋予分数5(等级2的中等分数)。

3.系统的构建
3.1 系统的组成


  
  系统整体可分为3部分:
  (1)人机接口:主要负责程序输入控制、显示输出和声音报警等。
  (2)网络状态判断:这是整个程序的核心,上文提到的算法在此实现。
(3)历史记录模块:主要负责运行时网络状况的记录,可以通过直接记录文本、或者数据库等形式实现。
3.2 系统界面

4.结果分析
    在实际应用中线路通信状态分为三种:网络良好、通信质量不佳、通信中断。经测试系统可正确反馈通信状态;对于通信质量不良状态的复杂状态,没有产生系统误报;在网络出现中断时,报警响应时间小于10秒。达到了系统设计的要求。
5.结论
  本系统已经在网络通信值班中得到实际应用,经过长时间的测试,系统无误报现象,对于不同的通信质量也可进行正确的判断。系统具有易于部署、易于维护等优点,达到了实际应用的要求。但系统对于Windows API的发掘并不彻底,在下一步的工作过程中可以将Windows API继续作为研究重点进一步丰富系统的功能。

参考文献
343

上一篇:案例式教学法在“Visual FoxPro程序设计”教学改革

下一篇:高校机房管理系统的设计与实现