网络流量在线分析系统的设计与实现Word文档下载推荐.docx

上传人:b****2 文档编号:13268132 上传时间:2022-10-09 格式:DOCX 页数:42 大小:144.43KB
下载 相关 举报
网络流量在线分析系统的设计与实现Word文档下载推荐.docx_第1页
第1页 / 共42页
网络流量在线分析系统的设计与实现Word文档下载推荐.docx_第2页
第2页 / 共42页
网络流量在线分析系统的设计与实现Word文档下载推荐.docx_第3页
第3页 / 共42页
网络流量在线分析系统的设计与实现Word文档下载推荐.docx_第4页
第4页 / 共42页
网络流量在线分析系统的设计与实现Word文档下载推荐.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

网络流量在线分析系统的设计与实现Word文档下载推荐.docx

《网络流量在线分析系统的设计与实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网络流量在线分析系统的设计与实现Word文档下载推荐.docx(42页珍藏版)》请在冰豆网上搜索。

网络流量在线分析系统的设计与实现Word文档下载推荐.docx

在这些统计数据的基础上分析不同网络应用的流量特征。

二、实训内容

(1)能够实时抓取网络中的数据包。

并实时显示在程序界面上。

用户可自定义过滤条件以抓取所需要的数据包。

(2)分析各个网络协议格式,能够显示各协议字段的实际意义。

例如,能够通过该程序反映TCP三次握手的实现过程。

(3)采用Hash链表的形式将网络数据以连接(双向流)的形式存储。

例如,抓取一段时间(如30分钟)的网络流量,将该段时间以固定时长(如1分钟)为单位分成若干个时间片,计算网络连接在每一个时间片内的相关统计量。

并在上述统计数据的基础上分析不同应用如WEB、DNS、在线视频等服务的流量特征。

注意,可根据实际的流量分析需要自己定义相关的统计量。

三、主要设备及环境

硬件设备:

(1)台式计算机或笔记本计算机(含网络适配器)

软件设备:

(2)Windows操作系统

(3)网络数据包捕获函数包,Windows平台为winpcap

(4)编程语言选用C/C++。

(5)编程环境为codeblocks

四、设计与步骤

(1)设计代码检索机器所连接的所有网络适配器,并在屏幕中显示适配器的名称和详细信息,用户可以输入适配器编号选择指定的适配器用来捕获包,如果没有找到适配器,提示用户检查WinPcap是否安装,代码与结果显示如下:

/*setthesource*/

if(pcap_createsrcstr(source,PCAP_SRC_IFLOCAL,NULL,NULL,NULL,errbuf)==-1){

printf("

%s\n"

errbuf);

exit(-1);

}

printf("

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);

while(--i)

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->

sin_addr.s_addr);

}

if(a->

netmask)

/*Y-掩码*/

\tNetmask:

netmask)->

broadaddr)

/*Y-广播地址*/

\tBroadcastAddress:

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){

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;

/*选择过滤规则*/

printf("

printf("

%d:

1,"

IP协议"

2,"

IP和TCP协议"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1