网络流量在线分析系统的设计与实现Word文档格式.docx
- 文档编号:13099537
- 上传时间:2022-10-05
- 格式:DOCX
- 页数:41
- 大小:105.70KB
网络流量在线分析系统的设计与实现Word文档格式.docx
《网络流量在线分析系统的设计与实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《网络流量在线分析系统的设计与实现Word文档格式.docx(41页珍藏版)》请在冰豆网上搜索。
24
八、
附录……………………………………………………
25
一、实训目的
设计并实现一个网络流量的分析系统。
该系统具有以下功能:
(1)实时抓取网络数据。
(2)网络协议分析与显示。
(3)将网络数据包聚合成数据流,以源IP、目的IP、源端口、目的端口及协议等五元组的形式存储。
(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。
在这些统计数据的基础上分析不同网络应用的流量特征。
二、实训内容
(1)能够实时抓取网络中的数据包。
并实时显示在程序界面上。
用户可自定义过滤条件以抓取所需要的数据包。
(2)分析各个网络协议格式,能够显示各协议字段的实际意义。
例如,能够通过该程序反映TCP三次握手的实现过程。
(3)采用Hash链表的形式将网络数据以连接(双向流)的形式存储。
(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。
例如,抓取一段时间(如
30分钟)的网络流量,将该段时间以固定时长(如1分钟)为单位分成若干个时间片,计算网络连接在每一个时间片内的相关统计量。
并在上述统计数据的基础上分析不同应用如WEB、DNS、在线视频等服务的流量特征。
注意,可根据
实际的流量分析需要自己定义相关的统计量。
三、主要设备及环境
硬件设备:
(1)台式计算机或笔记本计算机(含网络适配器)软件设备:
(2)Windows操作系统
(3)网络数据包捕获函数包,Windows平台为winpcap
(4)编程语言选用C/C++。
(5)编程环境为codeblocks
4、设计与步骤
(1)设计代码检索机器所连接的所有网络适配器,并在屏幕中显示适配器的名称和详细信息,用户可以输入适配器编号选择指定的适配器用来捕获包,如果没有找到适配器,提示用户检查WinPcap是否安装,代码与结果显示如下:
/*setthesource*/
if(pcap_createsrcstr(source,PCAP_SRC_IFLOCAL,NULL,NULL,NULL,errbuf)==-1){
printf("
%s\n"
errbuf);
exit(-1);
}
source:
%s"
source);
/*findalldevices*/
if(pcap_findalldevs_ex(source,NULL,&
alldevs,errbuf)==
-1){
/*chooseonedevices*/d=alldevs;
while(d!
=NULL){
%s,%s\n"
d->
name,d->
description);
d=d->
next;
chooseadevice[numberbetween1to4]:
"
);
scanf("
%d"
&
i);
d=alldevs;
while(--i)
d=d->
printf("
\n---------------------------------------------
-\n"
selecteddevice:
%s\n"
name);
实验结果显示如下:
(2)选择指定适配器后,调用ifprint();
函数计算本机的IP地址、掩码、广播地址、目标地址等信息,并用声明staticcharb;
用来记录本机IP地址,为接下来查找Hash表判断流量包的流向做准备:
voidifprint(pcap_if_t*d)
{
pcap_addr_t*a;
/*名称*/
//printf("
d->
/*描述*/
if(d->
description)
\tDescription:
/*回环地址*/
\tLoopback:
(d->
flags&
PCAP_IF_LOOPBACK)?
yes"
:
no"
/*IP地址*/
for(a=d->
addresses;
a;
a=a->
next)
{
printf("
\tAddressFamily:
#%d\n"
a->
addr->
sa_family);
switch(a->
sa_family)
caseAF_INET:
printf("
\tAddressFamilyName:
AF_INET\n"
if(a->
addr)
/*Y-IP地址*/
{
printf("
\tAddress:
iptos(((structsockaddr_in*)a-
>
addr)->
sin_addr.s_addr));
b=iptos(((structsockaddr_in*)a->
addr)-
sin_addr.s_addr);
}
if(a->
netmask)
/*Y-掩码*/
\tNetmask:
iptos(((structsockaddr_in
*)a->
netmask)->
broadaddr)
/*Y-广播地址*/
\tBroadcastAddress:
iptos(((structsockaddr_in*)a->
broadaddr)->
dstaddr)
/*Y-目标地址*/
\tDestinationAddress:
dstaddr)->
break;
default:
/*未知*/
Unknown\n"
}
\n"
/*来自tcptracert,把数字IP地址转换为点格式*/#defineIPTOSBUFFERS12
char*iptos(u_longin)
staticcharoutput[IPTOSBUFFERS][3*4+3+1];
staticshortwhich;
u_char*p;
p=(u_char*)&
in;
which=(which+1==IPTOSBUFFERS?
0:
which+1);
sprintf(output[which],"
%d.%d.%d.%d"
p[0],p[1],p[2],p[3]);
returnoutput[which];
结果显示如下:
(3)接收到用户输入的适配器编号,打开指定适配器:
/*openonedevice*/
cap_ins_des=pcap_open(d->
name,65536,PCAP_OPENFLAG_PROMISCUOUS,1000,NULL,errbuf);
if(cap_ins_des==NULL){printf("
pcap_freealldevs(alldevs);
(4)打开指定文件存储捕获的数据包:
/*openafiletodumpdata*/
dumpfp=pcap_dump_open(cap_ins_des,"
traffic1"
if(dumpfp==NULL){
Erroronopeningoutputfile\n"
(5)在main()函数开始做一个声明,方便用户自由选择过滤规则,声明如下:
intswitchnum;
chart1[]="
ip"
;
//ip过滤规则
chart2[]="
ipandtcp"
//tcp过滤规则
chart3[]="
ipandudp"
//udp过滤规则
chart4[]="
//mac帧过滤
charpacket_filter[100];
//thefilter
设置过滤规则时使用swich()语句判断用户输入的编号,是对应的编号与对应的过滤规则相一致:
/*getthenetmask,usedatcompilingthefilter*/if(d->
addresses!
=NULL)
netmask=((structsockaddr_in*)(d->
addresses-
netmask))->
sin_addr.S_un.S_addr;
/*@#$%^&
*!
*/else
netmask=0xffffff;
/*255.25.255.0*/
//netmask=0;
/*选择过滤规则*/
\n \n"
printf("
%d:
1,"
IP协议"
2,"
IP和TCP协议"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络流量 在线 分析 系统 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)