网络流量在线分析系统的设计与实现(共41页).docx
《网络流量在线分析系统的设计与实现(共41页).docx》由会员分享,可在线阅读,更多相关《网络流量在线分析系统的设计与实现(共41页).docx(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上综合实训报告题目:网络流量在线分析系统的设计与实现 信息学院计算机科学系目 录一、 实训目的 3二、 实训内容 3三、 主要设备及环境 3四、 设计与步骤 4五、 过程与调试 22六、 整理与小结 23七、 参考文献 24八、 附录 25一、实训目的设计并实现一个网络流量的分析系统。该系统具有以下功能:(1)实时抓取网络数据。(2)网络协议分析与显示。(3)将网络数据包聚合成数据流,以源IP、目的IP、源端口、目的端口及协议等五元组的形式存储。(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。在这些统计数据
2、的基础上分析不同网络应用的流量特征。二、实训内容 (1)能够实时抓取网络中的数据包。并实时显示在程序界面上。用户可自定义过滤条件以抓取所需要的数据包。(2)分析各个网络协议格式,能够显示各协议字段的实际意义。例如,能够通过该程序反映TCP三次握手的实现过程。(3)采用Hash链表的形式将网络数据以连接(双向流)的形式存储。(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。例如,抓取一段时间(如30分钟)的网络流量,将该段时间以固定时长(如1分钟)为单位分成若干个时间片,计算网络连接在每一个时间片内的相关统计量。并在上述统计数据的基础
3、上分析不同应用如WEB、DNS、在线视频等服务的流量特征。注意,可根据实际的流量分析需要自己定义相关的统计量。三、主要设备及环境硬件设备:(1)台式计算机或笔记本计算机(含网络适配器)软件设备:(2)Windows操作系统(3)网络数据包捕获函数包,Windows平台为winpcap(4)编程语言选用C/C+。(5)编程环境为codeblocks4、 设计与步骤(1) 设计代码检索机器所连接的所有网络适配器,并在屏幕中显示适配器的名称和详细信息,用户可以输入适配器编号选择指定的适配器用来捕获包,如果没有找到适配器,提示用户检查WinPcap是否安装,代码与结果显示如下:/* set the s
4、ource */if (pcap_createsrcstr(source, PCAP_SRC_IFLOCAL, NULL, NULL, NULL, errbuf) = -1) printf(%sn, errbuf);exit(-1);printf(source: %s, source);/* find all devices */if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) = -1) printf(%sn, errbuf);exit(-1);/* choose one devices */d = alldevs;while (
5、d != NULL) printf(%s, %sn, d-name, d-description);d = d-next;printf(choose a devicenumber between 1 to 4:);scanf(%d, &i);d = alldevs;while (-i)d = d-next; printf(n-n);printf(selected device: %sn, d-name);实验结果显示如下:(2) 选择指定适配器后,调用ifprint();函数计算本机的IP地址、掩码、广播地址、目标地址等信息,并用声明static char b;用来记录本机IP地址,为接下来查
6、找Hash表判断流量包的流向做准备:void ifprint(pcap_if_t *d) pcap_addr_t *a; /* 名称 */ /printf(%sn,d-name); /* 描述 */ if (d-description) printf(tDescription: %sn,d-description); /* 回环地址 */ printf(tLoopback: %sn,(d-flags & PCAP_IF_LOOPBACK)?yes:no); /* IP 地址 */ for(a=d-addresses;a;a=a-next) printf(tAddress Family: #%d
7、n,a-addr-sa_family); switch(a-addr-sa_family) case AF_INET: printf(tAddress Family Name: AF_INETn); if (a-addr) /* Y- IP 地址 */ printf(tAddress: %sn,iptos(struct sockaddr_in *)a-addr)-sin_addr.s_addr); b = iptos(struct sockaddr_in *)a-addr)-sin_addr.s_addr); if (a-netmask) /* Y- 掩码 */ printf(tNetmask
8、: %sn,iptos(struct sockaddr_in *)a-netmask)-sin_addr.s_addr); if (a-broadaddr) /* Y- 广播地址 */ printf(tBroadcast Address: %sn,iptos(struct sockaddr_in *)a-broadaddr)-sin_addr.s_addr); if (a-dstaddr) /* Y - 目标地址 */ printf(tDestination Address: %sn,iptos(struct sockaddr_in *)a-dstaddr)-sin_addr.s_addr);
9、 break; default: /* 未知 */ printf(tAddress Family Name: Unknownn); break; printf(n);/* 来自 tcptracert, 把数字IP地址转换为点格式 */#define IPTOSBUFFERS 12char *iptos(u_long in) static char outputIPTOSBUFFERS3*4+3+1; static short which; u_char *p; p = (u_char *)∈ which = (which + 1 = IPTOSBUFFERS ? 0 : which +
10、1); sprintf(outputwhich, %d.%d.%d.%d, p0, p1, p2, p3); return outputwhich;结果显示如下:(3) 接收到用户输入的适配器编号,打开指定适配器:/* open one device */cap_ins_des = pcap_open(d-name, 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf);if (cap_ins_des = NULL) printf(%sn, errbuf);pcap_freealldevs(alldevs);exit(-1);(4) 打开指
11、定文件存储捕获的数据包:/* open a file to dump data */dumpfp = pcap_dump_open(cap_ins_des, traffic1);if( dumpfp = NULL) printf(Error on opening output filen);exit(-1);(5) 在main()函数开始做一个声明,方便用户自由选择过滤规则,声明如下:int switchnum;char t1 = ip;/ip过滤规则char t2 = ip and tcp;/tcp过滤规则 char t3 = ip and udp;/udp过滤规则 char t4 = ;/
12、mac帧过滤char packet_filter100;/ the filter设置过滤规则时使用swich()语句判断用户输入的编号,是对应的编号与对应的过滤规则相一致:/* open a file to dump data */dumpfp = pcap_dump_open(cap_ins_des, traffic1);if( dumpfp = NULL) printf(Error on opening output filen);exit(-1);/* get the netmask, used at compiling the filter */if (d-addresses != N
13、ULL)netmask = (struct sockaddr_in *)(d-addresses-netmask)-sin_addr.S_un.S_addr;/*#$%&*!*/elsenetmask = 0xffffff;/* 255.25.255.0 */ netmask = 0;/*选择过滤规则*/printf(n-n); printf(%d:%sn,1, IP协议); printf(%d:%sn,2, IP和TCP协议); printf(%d:%sn,3, IP和UDP协议); printf(%d:%sn,4, MAC帧); printf(请选择要获取的协议类型):); scanf(%
14、d, &switchnum); switch (switchnum) case 1: strcpy(packet_filter,t1); break; case 2: strcpy(packet_filter,t2); break; case 3: strcpy(packet_filter,t3); break; case 4: strcpy(packet_filter,t4); break; default:printf(errorn); /* compile the filter */if (pcap_compile(cap_ins_des, &fcode, packet_filter,
15、1, netmask) 0) ? argv_time : timeLen; /int argv_time = 2; /args.timeLen = argv_time; /printf(抓取时长:%d sn, args.timeLen); if(pthread_create(&ptClock, NULL, thread_clock, &args) printf(pthread_create(): Error!n); return -1;void *thread_clock(void *argv) pcap_t *handle = (argument*)argv)-handle; int tim
16、eLen = (argument*)argv)-timeLen; / set time / printf(%d,timeLen); Sleep(timeLen*1000); pcap_breakloop(handle);结果显示如下:(7) 抓包时调用函数pcap_loop()函数调用cb_getPacket()函数,实现在线程内的抓包,Sleep函数一旦结束,通过pcap_breakloop()退出抓包:pcap_loop(cap_ins_des, -1, cb_getPacket, (u_char*)dumpfp);void cb_getPacket(u_char *dumpfile, c
17、onst struct pcap_pkthdr *pkthdr, const u_char *packet) / ip_header *seg_ip = (ip_header*)(package + ETHER_LEN); pcap_dump(dumpfile, pkthdr, packet); ethernet_protocol_packet_callback(dumpfile,pkthdr,packet);(8) 设置完成抓包时长后,系统开始进行抓包,一旦抓包结束,调用pcap_close()关闭会话并释放适配器列表:pcap_close(cap_ins_des); pcap_freeal
18、ldevs(allAdapters);/释放适配器列表(9) 捕获结束后将捕获的数据包存入traffic1.data文件中,再将文件打开进行分析,打开文件之前使用pcap_createsrcstr函数指明文件位置为本机文件,文件名为“traffic1.data”,在调用pcap_open()打开捕获文件:pcap_t *fp;/文件指针 /pcap_createsrcstr指明打开文件的地方:本地文件 if (pcap_createsrcstr(source,/*源字符串*/ PCAP_SRC_FILE,/*本机文件*/ NULL,/*远程主机*/ NULL,/*远程主机端口*/ traffi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络流量 在线 分析 系统 设计 实现 41
限制150内