【摘要】 本文论述了网络通信监测的实现原理与实现过程,遵照国际标准化开放系统互联(osi)七层体系结构,利用网络驱动接口规范windis32 v5.0技术,实现了在应用层对数据链路层的控制,完成了对网上流动数据帧的实时截获、解封与分析。
【关键词】网络分层 windis32技术 网络信息截获 数据帧 ndis网络适配器
1.前言
随着计算机网络技术的发展,各类网络规模的扩大,远程访问的增加,虚拟专用网(vpn)的出现和internet的普及,网络安全性已成为计算机网络领域一门重要的研究学科。
网络监控是保障网络安全性的基本措施之一。网络监控,用于监测网上流动信息,并对网络信息给予适当控制。网络监控,可用于调试网络应用程序,判断应用程序是否正确地发送或接收了数据包。网络监控,还可用于监视网络信息,杜绝不健康站点的不健康内容,维护网络环境。应用于安全防范,可监视我方信息内容、保障网络安全,截获情报、分析怀有敌意方的网站。在计算机网络上实施有效的攻击与保护,是网络监控技术在军事上的重要发展方向之一。
本文论述的网络通信实时监测的实现,是用于特殊目的的数据通信程序设计的突破口,是网络监控技术的基础部分,其实现基于网络体系结构与windis32技术。
2.网络体系结构

现代计算机网络设计是按高度的结构化方式进行的,国际标准化组织(iso)为更广泛的计算机互联制定了标准化的开放系统互联(osi)网络体系结构,如图1所示。
osi参考模型用结构描述方法,即分层描述的方法,将整个网络的通信功能划分为七个部分(也叫七个层次),每层各自完成一定的功能。由低层至高层分别称为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。两台网络主机之间进行通信时,发送方将数据从应用层向下传递到物理层,每一层协议模块为下一层进行数据封装,数据流经网络,到达接收方,接着再由下而上通过协议栈传递,并与接收方应用程序进行通信。
在通用网络中,数据链路层由网络适配器实现,本文中网络通信监测的立足点在于数据链路层,基于电缆是固有的广播性介质,通过对网络适配器的控制,实时截获与分析经过网络适配器的所有网上流动信息。
3.windis32技术
windis32全称为win32 ndis(network driver interface specification)网络驱动接口规范,用于开发windows产品,可在windows 9x和windows nt上直接访问ndis媒体访问控制(mac)驱动接口。图2显示了windows网络驱动组件与win32 ndis结构组件:

图2.windows网络驱动组件与win32 ndis结构组件
windis32网络组件由四部分组成:ndis适配器、pcandis5 ndis协议驱动、w32n50 windis32 api dll、windis32应用程序。windis32应用程序调用w32n50.dll动态链接库提供的api应用程序接口,通过ndis协议驱动模块,实现对ndis适配器进行的存取操作。网络驱动接口规范ndis的主要特征是所有适配器相关驱动均由ndis接口打包,例如,最底层ndis nic驱动不能对网卡直接执行i/o,它通过ndis打包服务来访问硬件;高层windows ndis网络组件使用ndis打包界面与适配器相关驱动通信。只有ndis协议驱动可以调用ndis打包,访问ndis适配器。
windis32应用程序接口函数包括:w32n_openadapter(),打开一个已被命名的ndis适配驱动器,若操作成功,则生成一个面向适配器对象的windis32适配器句柄,这一句柄被随后多个在该适配器上操作的w32n_xxx函数所用; w32n_closeadapter(),关闭已打开的适配器句柄;w32n_packetread(),数据帧读操作;w32n_packetreadex(),数据帧异步读操作;w32n_packetsend(),发送数据帧操作;w32n_packetsendex()、w32n_makendisrequest()等等。
windis32技术使得从win32应用层进行ndis请求如同在一个内核模式的驱动器内部进行请求一样简单,并支持多个网络适配器同时打开,完成各自的信息发送与接收。
4.网络信息监测的实现
网络信息监测程序分为信息截获与信息分析两大部分,其中信息截获程序流程如图3所示,采用多进程与多线程技术,完成数据的实时截获。

其中网络适配器列表通过读取系统注册表生成;网络适配器详细信息包括适配器型号、网络适配器物理地址、传输最大帧、传输速率以及机内标识符,通过函数
w32n_makendisrequest()获得。
协议过滤部分是包括pcausa端口的pcandis5协议驱动,bpf过滤器是由unix环境到windows的模拟机制,为win32应用程序提供了一种普通而又便利的机制,可过滤指定协议,由协议驱动执行,拒绝不想要的数据帧。支持协议包括:传输控制协议tcp、互连网协议ip、地址解析协议arp、反向地址解析协议rarp、互连网控制报文协议icmp、互连网组管理协议igmp、novell spx/ipx协议ipx、用户数据报协议udp、netbeui协议、appletalk协议。
信息分析部分利用已获知的媒体访问控制协议,提取出数据帧中的有效域值,如源主机物理地址、目的主机物理地址、帧长度等。并同时为每一被截获的数据包打上时标,注上序列号,为下一步数据重组提供可靠依据。
接收数据帧显示与信息统计结果范例如下:
包序列号:0000000032 时间:0005860470 msec 长度:54/54
ethernet 目的:00.40.05.39.a2.b0 源:00.00.b4.86.74.fa 类型:0x0800
000000: 00 40 05 39 a2 b0 00 00 : b4 86 74 fa 08 00 45 00 .@.9......t...e.
000010: 00 28 26 03 40 00 20 06 : a3 25 64 64 64 7a 64 64 .(&.@. ..%dddzdd
000020: 64 65 04 06 00 8b 00 40 : bf 14 00 6c 24 b9 50 10 de.....@...l$.p.
000030: 22 38 12 ea 00 00 : "8..............
包序列号:0000000033 时间:0005860764 msec 长度:109/109
ethernet 目的:00.40.05.39.a2.b0 源:00.00.b4.86.74.fa 类型:0x0800
000000: 00 40 05 39 a2 b0 00 00 : b4 86 74 fa 08 00 45 00 .@.9......t...e.
000010: 00 5f 27 03 40 00 20 06 : a1 ee 64 64 64 7a 64 64 ._'.@. ...dddzdd
000020: 64 65 04 06 00 8b 00 40 : bf 14 00 6c 24 b9 50 18 de.....@...l$.p.
000030: 22 38 de c6 00 00 00 00 : 00 33 ff 53 4d 42 1a 00 "8.......3.smb..
000040: 00 00 00 00 00 80 00 00 : 00 00 00 00 00 00 00 00 ................
000050: 00 00 03 08 25 2d 03 08 : 01 4c 08 01 08 00 80 10 ....%-...l......
000060: 00 00 10 00 00 00 00 00 : 00 00 00 00 00 ................
包序列号:0000000034 时间:0005860766 msec 长度:1514/1514
ethernet 目的:00.00.b4.86.74.fa 源:00.40.05.39.a2.b0 类型0x0800
000000: 00 00 b4 86 74 fa 00 40 : 05 39 a2 b0 08 00 45 00 ....t..@.9....e.
000010: 05 dc 64 0b 40 00 80 06 : ff 68 64 64 64 65 64 64 ..d.@....hdddedd
000020: 64 7a 00 8b 04 06 00 6c : 24 b9 00 40 bf 4b 50 10 dz.....l$..@.kp.
000030: 20 b7 86 da 00 00 00 00 : 10 00 7e 8b 77 da d2 d0 .........~.w...
000040: d7 27 59 9a 8f 18 d3 77 : 15 d5 6c 86 0f 2c 62 3e
...
停止数据帧接收
应用统计:
已接收数据帧数目 :34
已发送数据帧数目 : 0
5.进一步研究与发展
本文所研究的网络信息监测属于计算机网络系统安全对策研究的一部分,属于网络信息监测的基础性研究。以此研究成果为基础,可进行进一步的软件开发,从而实现网络通信状况实时监测、情报获取、网上各站点地址分析、站点类型分析,为计算机网络的安全维护提供监测手段,因此,具有特别的意义。
参考文献
1.pcausawindis 32 v5.0文档1998.3
2.刘锦德等计算机网络大全电子工业出版社1997.7
3.kris jamsa等internet编程电子工业出版社1996.5
4.david j.kruglinskivisual c++技术内幕清华大学出版社1996.5