转载自«计算机世界日报» (文/陈军)
---- 本公司在产品开发过程中,需要研究多种以太网交换机(又称智能集线器)的内部网管信息结构,为此,必须编写出一个“窃听”程序,把网管程序与交换机的通讯内容记录下来加以分析.本人在visual c++ 6.0下用mfc socket类编出程序,成功地实现了上述目的. 【程序编程相关:Asp组件中级入门与精通系列之三】
一. 开发目的及原理 【推荐阅读:Asp组件中级入门与精通系列之二】
---- 网管信息的范围十分广泛,如网络流量,连接状态等,因被管设备的不同而不同,厂家也能依照有关的国际标准自定义自家产品的网管信息.网管信息集中定义于管理信息库(mib)中,整个体系是一个可扩展的树状结构.一条条的网管信息被包装在snmp协议包内,再往下传给传输层,转成udp包,然后通过socket 机制发送出去. 【扩展信息:微软.NET手持设备开发工具包基础篇(转】
---- 目前,标准的网络管理程序与支持网管的网络设备之间大多采用标准的简单网络管理协议(snmp)进行通讯.snmp是一种高层协议,建立于udp/ip之上.通讯双方按照snmp格式来传递各种网管信息与控制信息,并能进行事件实时报告或报警,从而使网络管理员能方便及时地控制网络当前的运行情况.
---- 本程序的基本原理是:插到网管程序与被管设备之间“欺上瞒下”,与网管程序通讯时冒充被管设备;与被管设备通讯时冒充网管程序,使二者对本程序“无话不谈”;本程序则暗中有序地记录下谈话内容,然后再“上传下达”,将收到的内容转发给真正的接收者,使谈话继续下去,如此循环不已.
二. 编程的思路与具体过程
---- 本程序不需要复杂的图形界面,因此,只需用project wizard开出一个支持socket而基于对话框的mfc 应用程序即可.对话框的类名为cchatdlg,然后再用资源编辑器在这个对话框上加上一个按钮,面上文字为“listen”.接收到的所有信息将在visual c++集成环境的output窗口中用trace语句打出,这样做的目的是能方便及时地看到各种数据,当然也可用别的方法.在本程序中,client指网管程序,server指交换机.
---- 接着给本项目添加两个类,它们都衍生自csocket,可调用classwizard工具生成.cclientsocket用于接收来自网管程序的udp数据,而cserversocket则用于接收来自交换机的udp数据.这两个类的定义如下:
class cclientsocket : public csocket
{// attributespublic:// operations
public:cclientsocket(cchatdlg* pdlg);virtual ~cclientsocket();... 下一页