📄 csdn_文档中心_用vxd技术设计网络计费系统.htm
字号:
<TBODY>
<TR>
<TD align=middle bgColor=#fafafa class=td1 vAlign=top width=150><BR>
<SCRIPT src="CSDN_文档中心_用VxD技术设计网络计费系统.files/microsoft.js"></SCRIPT>
</TD>
<TD align=middle width=620>
<TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle height=10 width=50></TD>
<TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://www.csdn.net/develop/">文档中心</A> - <FONT
color=#003399>Visual C++</FONT> </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>标题</FONT></TD>
<TD><B> 用VxD技术设计网络计费系统</B> lizhx(原作)
</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
<TD width=500> 用VxD技术设计网络计费系统</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>出处</FONT></TD>
<TD height=10> <A
href="http://elizhx.yeah.net/">http://elizhx.yeah.net/</A></TD></TR>
<TR>
<TD align=middle height=10></TD>
<TD height=10></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>
<STYLE type=text/css>A:link {
COLOR: #006699; FONT-FAMILY: "宋体"; FONT-SIZE: 9pt; TEXT-DECORATION: none
}
A:visited {
COLOR: #000000; FONT-FAMILY: "宋体"; FONT-SIZE: 9pt; TEXT-DECORATION: none
}
A:active {
COLOR: #ff0000; FONT-FAMILY: "宋体"; FONT-SIZE: 9pt; TEXT-DECORATION: none
}
A:hover {
COLOR: #ff0000; FONT-FAMILY: "宋体"; FONT-SIZE: 9pt; TEXT-DECORATION: underline
}
BODY {
FONT-SIZE: 9pt
}
TH {
FONT-SIZE: 9pt
}
TD {
FONT-SIZE: 9pt
}
.ee {
FONT-FAMILY: "宋体"; FONT-SIZE: 9pt; LINE-HEIGHT: 9pt
}
A:hover {
COLOR: rgb(255,134,137); TEXT-DECORATION: underline
}
</STYLE>
<P align=center><FONT face=宋体 size=5>杭州商学院校园网网络计费系统</FONT></P>
<P align=center>--计费信息获取子系统的设计与实现 </P>
<P align=center>李壮相 </P>
<P><B>[摘要]</B> 本文给出了一个基于Web的、跨平台的校园网网络计费系统的初步设计与实<BR>
施方案,并给出系统的模块结构和功能的描述,同时详细地探讨了计费信息<BR>
获取子系统(底层数据报文截取及其接口)的分析、设计与实现。</P>
<P><B>[关键词]</B>计费系统、底层数据报文截取、TCP/IP、FTP、数据报文、共享介质<BR>
信息流量、虚拟设备、VxD技术、数据采集、数据控制 </P>
<P><B>一、引言</B> </P>
<P>
因特网以其信息传送方便、快捷、费用低廉,并且可以实现资源共享等诸多优点,深受广大用户青睐。目前,我院已通过国家教科<BR>网连入因特网,给我们的教学、科研带来极大的方便,同时也不可回避因特网服务的计费问题。目前的网络虽然在速度上有了很大的提<BR>高,但是随着网络用户数量的迅速增加和传输量的增加(比如图片和多媒体资料越来越普遍),网络带宽仍然很紧张。对网络使用收取<BR>合理的费用一方面可以维持网络的运行和发展,另一方面,也可以促使用户合理使用网络资源。由于网络结构的多样性和计费规则的复<BR>杂性,为此我们分析我院校园网的特点,在校园网网络的软硬件上提出了一种校园网的网络计费系统的设计与实施方案。</P>
<P> 作为计费信息系统的基础,计费信息的截取是系统整体的核心关键部分,该模块的分析、设计与实现好坏直接影响着系统的设计与<BR>实现和校园网的网络计费管理,本文对此进行详细的探讨和讨论。
</P>
<P><B>二、系统设计和分析</B> </P>
<P> 国际上,计费管理负责监视和记录用户对网络资源的使用,并分配网络运行成本。其主要功能有: </P>
<UL>
<LI>数据的采集(包括简单的统计功能),即从用于计费的设备(如计费路由器)中采集原始数据,经过简单的统计后,放入数据库。<BR>在数据采集的同时进行简单的统计是必要的。一个原因是原始数据量是非常大的,如果全部记录下来,数据库往往不够;另一个原<BR>因是对原始数据的查询统计非常费时间,因此需要在数据采集的同时进行简单的统计。
<LI>数据统计,即对数据库中的数据进行进一步的统计,如对某个时间段的某个IP地址区间的流量统计。
<LI>流量分析,即结合数据库中的流量数据和其它有关信息,对流量作出分析。如非法用户流量,对敏感站点的访问流量等。
<LI>计费信息查询,即根据用户管理模块提出的查询要求,通过权限检查,根据用户类型从数据统计和流量分析模块中取得相应的查询<BR>结果。
<LI>报表生成,即根据流量数据和收费规划,计算用户应交的费用,并生成报表。
<LI>计费规划的维护,即修改各种计费参数,如单价、免费网段设置等。 </LI></UL>
<P> 我院校园网的主干网络采用高速非共享介质的网络结构,但是院内各部门与外界的互联均依赖共享介质,所以我们设计的校园网网络<BR>计费系统正是建立在这一"关口"上。</P>
<P> 在共享介质网络中,流经这一网络的任何数据包,均可由这一网段的任何一台主机所截获。因此,把网络计费系统设计在与外界互联<BR>的网段上,即可统计出校园内各部门与外界的所有通信量。</P>
<P> 总体上,我们所设计的网络计费系统分为三部分,一是在Win32平台上的线程对数据包的截获,并且进行初步的整理,生成日志文件,<BR>并加适当的控制,这是低层的服务程序,作为前台;而后台则是在Windows
NT Server上的数据库管理,用Borland Delphi
4.0开发,直接<BR>取得第一部分截取程序生成的日志文件和通过FTP获取在Linux服务器上其它服务生成的日志文件,对其分析,统计出有效的数据信息,并至<BR>于以BDE驱动的数据库文件中。三是计费信息用户查询子系统,使得用户能在线通过权限查询到自己各个时间段内的计费信息和费用情况,<BR>有利于减轻网络管理员的工作负担。</P>
<P> 具体情况如下:</P>
<P> ⑴、因特网采用的是TCP/IP协议,所以Win32平台上的进程只要截获到所有的IP数据包,就可以分析出所需要统计的计费信息。对于统<BR>计信息分以下几种情况:<BR> FTP:又分上传和下载,下载的数据报信息不用列入统计范围,上传则需要;<BR> UDP:数据报信息需要统计;<BR> 拨号上网:可以通过在路由器上生成的日志文件进行分析;<BR> 电子邮件:也可以通过Windows
NT
Server上的Nescape邮件服务器留下的日<BR> 志文件进行统计,而不需要进行数据报的截获;<BR> ⑵、后台的数据库信息管理通过由Delphi开发的管理信息系统采集上述的数据信息实现的,对FTP、UDP、拨号上网和电子邮件的信息<BR>进行再次整理、分析,统计出必要的数据存于数据库中,可供使用校园网服务的各部门查询其费用情况之用。<BR> ⑶、计费信息用户查询子系统,用户通过页面浏览器访问,提交请求反馈该用户使用校园网信息服务的费用情况。查询子系统通过权<BR>限(如身份认证)和查询条件查询数据库的数据,输出该用户的需求的信息。</P>
<P> 系统计费依据</P>
<P> 对于网络计费的信息而言,最根本的是IP地址、网络流量以及时间段。因此,系统的计费依据就是IP的地址和流量,还有时间段的统<BR>计,以此信息作为收费规则。</P>
<P> ㈠、IP地址 区分出校内和校外、国内和国外。由于因特网的网络地址管理都是划分层次的,只要知道其隶属于哪一层次即可进行<BR> 管理;<BR> ㈡、IP流量 区分出国内和国外的数据流量来统计;<BR> ㈢、时间段 对于拨号上网的用户,不同的时间段有不同的收费规则;<BR> ㈣、特殊的校内部门有其对应的计费依据。</P>
<P><B>三、计费信息获取子系统(底层数据报截取及其接口)的分析与设计</B></P>
<P>3.1 关于VxD技术<BR> ①
为什么要使用VxD技术<BR> 为了减轻服务器的负担,而我院校园网的主干网络采用高速非共享介质的网络结构,但是院内各部门与外界的互联均依赖共享介<BR>
质,根据这一特点可用一台独立的计算机来处理计费工作以达到这一目的。这台服务器的操作系统可以是Linux也可以采用Win32,但<BR>
Win32具有易操作、可视化的的优点。虽然Win32平台不支持对设备的直接存取,但可以采用VxD技术来实现这一功能。<BR> ②
VxD在网卡上应用的关键技术 <BR> A. 载入VxD <BR> #include <WINDOWS.H>HANDLE
hVxD; <BR> hVxD =
CreateFile("\\\\.\\VPACKET.VXD",<BR> GENERIC_READ |
GENERIC_WRITE,<BR> 0,<BR> NULL,
<BR> OPEN_EXISTING,<BR> FILE_ATTRIBUTE_NORMAL
| FILE_FLAG_OVERLAPPED | FILE_FLAG_DELETE_ON_CLOSE, NULL);
<BR> if (hVxD == INVALID_HANDLE_VALUE)
<BR> return SYSERR; <BR> B. 释放VxD
<BR> CloseHandle(hVxD); <BR> C. 绑定VxD到网络接口卡 <BR> int
Bind(HANDLE hVxD, BYTE* inBuffer) <BR> { <BR> HANDLE hEvent;
<BR> DWORD cbRet; <BR> OVERLAPPED ovlp = {0,0,0,0,0};
<BR> int result; <BR> int cbIn = 5; <BR> hEvent =
CreateEvent(0, TRUE, 0, NULL); <BR> if (!hEvent) <BR> return
SYSERR; <BR> ovlp.hEvent = hEvent;
//DeviceIoControl函数直接发送一个控制码给指定的设备促使相应的设备去执行指定的操作 <BR> result =
DeviceIoControl(hVxD,<BR> IOCTL_PROTOCOL_BIND,<BR> inBuffer,
<BR> cbIn, <BR> inBuffer,
<BR> cbIn, <BR> &cbRet,
<BR> &ovlp); <BR> if (!result)
<BR> GetOverlappedResult(hVxD,<BR> &ovlp,
<BR> &cbRet, <BR> TRUE);
<BR> CloseHandle(hEvent);<BR> return OK;
<BR> }<BR> D.读数据包 <BR> int RcvPacket(HANDLE hVxD, BYTE*
Buffer, DWORD cbIn) <BR> { <BR> HANDLE hEvent; <BR> DWORD
cbRet = 0; <BR> OVERLAPPED ovlp = {0,0,0,0,0}; <BR> int
result; <BR> hEvent = CreateEvent(0, TRUE, 0, NULL); <BR> if
(!hEvent) <BR> return SYSERR; <BR> ovlp.hEvent = hEvent;
<BR> result =
DeviceIoControl(hVxD,<BR> IOCTL_PROTOCOL_READ,<BR> Buffer,
<BR> cbIn, <BR> Buffer,
<BR> cbIn, <BR> &cbRet,
<BR> &ovlp); <BR> if (!result)
<BR> GetOverlappedResult(hVxD, <BR> &ovlp,
<BR> &cbRet, <BR> TRUE);
<BR> CloseHandle(hEvent); <BR> return cbRet;
<BR> }<BR> E.送数据包
<BR> 与IOCTL_PROTOCOL_READ相似,此时参数为IOCTL_PROTOCOL_WRITE </P>
<P>3.2 截取部分的分析与设计</P>
<P> 由于校园网网络计费系统分为三大部分,采用底层数据报文截取来提供计费管理的信息依据,所以首先就要从相关的网络方面知识入手。</P>
<P> 在计算机网络体系结构中,虽然TCP/IP体系结构不是国际标准,但占有非常重要的地位。世界上第一个分组交换网是美国军方的实验网<BR>ARPANET,它的体系结构也采用分层次的结构。当初的ARPANET现已发展成为世界上规模最大的计算机网络Internet,即因特网。在因特网所<BR>使用的协议中,最著名的就是运输层的TCP传输控制协议和网络层的IP互连网协议。TCP/IP体系结构已成为计算机网络的事实上的国际标准,<BR>也称为工业标准。
又因为因特网采用的是TCP/IP协议(传输控制协议与互连网协议),流经共享介质的网络任何的数据报文遵循着该协议,<BR>所以Win32操作系统平台上的数据报截取进程模块只要截获到所有的TCP/IP数据报,从其报文的首部即可分析出所需的必要计费数据信息。</P>
<P> 而对于网络计费系统的计费信息而言,最根本的是源IP地址、目的IP地址、源端口、目的端口、TCP/IP数据报文的长度以及报文流经该<BR>共享介质网段的时间。这些信息的获取就要采用TCP/IP协议,进行相应的处理。因此,网络计费系统计费依据的获取就是IP的源、目的地址,<BR>源、目的端口和TCP/IP数据报文长度,还有报文流经的时间这项重要信息的获取。</P>
<P> 首先是分析TCP/IP网络体系下两个最主要的协议--互连网协议IP和传输控制协议的数据报文格式开始,从协议报文最基本的字段信息中<BR>提取出对计费管理有效的数据依据。</P>
<P>以下详细描述TCP/IP报文格式。 </P>
<P>IP数据报文段的格式如下所示:</P>
<P><IMG height=178 src="" width=538> </P>
<P>其中首部中几个重要字段的意义是: </P>
<UL>
<LI>总长度 占16Bit,是指首部和数据之和的长度,单位为字节,在本文中又称之为流量,数据报文的最大长度为65535字节,<BR>这在当前是够用的
<LI>协议 占8Bit,是指此数据报文所携带的运输层数据是使用何种协议,以便目的主机的IP层知道应将此数据报文上交给哪<BR>个进程,常用的协议和相应的协议字段值是:
<BR> UDP(17)、TCP(6)、ICMP(1)、GCP(3)、EGP(8)、IGP(9)<BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -