您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 网络流量在线分析系统的设计与实现
1综合实训报告题目:网络流量在线分析系统的设计与实现华中农业大学正方教务系统王枫指导老师:王建勇2信息学院计算机科学系目录一、实训目的………………………………………………3二、实训内容………………………………………………3三、主要设备及环境………………………………………4四、设计与步骤……………………………………………5五、整理与小结……………………………………………17六、参考文献………………………………………………183一、实训目的设计并实现一个网络流量的分析系统。该系统具有以下功能:(1)实时抓取网络数据。(2)网络协议分析与显示。(3)将网络数据包聚合成数据流,以源IP、目的IP、源端口、目的端口及协议等五元组的形式存储。(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。在这些统计数据的基础上分析不同网络应用的流量特征。二、实训内容(1)能够实时抓取网络中的数据包。并实时显示在程序界面上。用户可自定义过滤条件以抓取所需要的数据包。(2)分析各个网络协议格式,能够显示各协议字段的实际意义。例如,能够通过该程序反映TCP三次握手的实现过程。(3)采用Hash链表的形式将网络数据以连接(双向流)的形式存储。(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。例如,抓取一段时间(如30分钟)的网络流量,将该段时间以固定时长(如1分钟)为单位分成若干个时间片,计算网络连接在每一个时间片内的相关统计量。并在上述统计数据的基础上分析不同应用如WEB、DNS、在线视频等服务的流量特征。注意,可根据实际的流量分析需要自己定义相关的统计量。4三、主要设备及环境硬件设备:(1)台式计算机或笔记本计算机(含网络适配器)软件设备:(2)Windows操作系统(3)网络数据包捕获函数包,Windows平台为winpcap(4)编程语言选用C/C++。(5)编程环境为codeblocks5四、设计与步骤(1)定义mac,以太网帧,IPv4首部,TCP首部,UDP首部与一些用于设置时间的结构体,回调函数原型包括哈希表的插入,搜索,初始化。*6字节的mac地址*/typedefstructmac_address{u_charbyte1;u_charbyte2;u_charbyte3;u_charbyte4;u_charbyte5;u_charbyte6;}mac_address;/*以太网帧*/typedefstructethernet_header{mac_addressdaddr;//目的MAC地址mac_addresssaddr;//源MAC地址u_shortetherType//以太网帧类型}ethernet_header;/*IPv4首部*/typedefstructip_header{u_charver:4,ihl:4;//版本(4bits)+首部长度(4bits)u_chartos;//服务类型(Typeofservice)u_shorttlen;//总长(Totallength)u_shortidentification;//标识(Identification)u_shortflags_fo;//标志位(Flags)(3bits)+段偏移量(Fragmentoffset)(13bits)u_charttl;//存活时间(Timetolive)u_charproto;//协议(Protocol)u_shortcrc;//首部校验和(Headerchecksum)structin_addrsaddr;//源地址(Sourceaddress)structin_addrdaddr;//目的地址(Destinationaddress)u_intop_pad;//选项与填充(Option+Padding)}ip_header;6/*TCP首部*/typedefstructtcp_header{u_shortsport;//源端口(Sourceport)u_shortdport;//目的端口(Destinationport)u_int32_tsnumber;//序列号u_int32_tcnumber;//确认号u_shortreserve:6,//保留位tlen:4,//报头长度//后6位标志位fin:1,//关闭连接标志syn:1,//请求连接标志rst:1,//重置连接标志psh:1,//接收方尽快将数据放到应用层标志ack:1,//确认序号标志urg:1,//紧急指针标志ece:1,//拥塞标志位cwr:1;//拥塞标志位u_shortwindow;//窗口u_shortcsum;//校验和u_shorturgent;//紧急u_intop_pad;//选项与填充(Option+Padding)}tcp_header;/*UDP首部*/typedefstructudp_header{u_shortsport;//源端口(Sourceport)u_shortdport;//目的端口(Destinationport)u_shortlen;//UDP数据包长度(Datagramlength)u_shortcrc;//校验和(Checksum)}udp_header;/*用于设置时间的结构体*/typedefstructargument{pcap_t*adhandle;inttime;}argument;voidcrawl_time(void*time_c);/*回调函数原型*/7voidpacket_handler_mac(u_char*param,conststructpcap_pkthdr*header,constu_char*pkt_data);voidpacket_handler_ip(u_char*param,conststructpcap_pkthdr*header,constu_char*pkt_data);voidpacket_handler_tcp(u_char*param,conststructpcap_pkthdr*header,constu_char*pkt_data);voidpacket_handler_udp(u_char*param,conststructpcap_pkthdr*header,constu_char*pkt_data);voidInitHashTable(HashTable*H)//初始化哈希表{inti;H-count=MAXSIZE;H-Table=(HashNode*)malloc((H-count)*sizeof(HashNode));for(i=0;iH-count;i++){H-Table[i].ip_source_address;H-Table[i].ip_dest_address;H-Table[i].source_port=0;H-Table[i].dest_port=0;H-Table[i].sum=NULLKEY;H-Table[i].next=NULL;}}intHash(intkey){returnkey%MAXSIZE;}intInsertHashTable(HashTable*H,structin_addrsource_address,structin_addrdest_address,u_int16_ts_port,u_int16_td_port,intkey)//插入哈希表{intaddr;addr=Hash(key);if(H-Table[addr].sum!=key&&H-Table[addr].sum!=NULLKEY){HashNode*hashnode=(HashNode*)malloc(sizeof(HashNode));8hashnode-next=H-Table[addr].next;hashnode-ip_source_address=source_address;hashnode-ip_dest_address=dest_address;hashnode-sum=key;hashnode-source_port=s_port;hashnode-dest_port=d_port;H-Table[addr].next=hashnode;addr++;returnaddr;}elseif(H-Table[addr].sum==NULLKEY){H-Table[addr].sum=key;returnaddr;}}boolSerchHashTable(HashTable*H,structin_addrsource_address,structin_addrdest_address,u_int16_ts_port,u_int16_td_port,intkey)//搜索哈希表{intaddr;addr=Hash(key);if(H-Table[addr].sum==key&&(inet_ntoa(H-Table[addr].ip_source_address)==inet_ntoa(source_address))&&(inet_ntoa(H-Table[addr].ip_dest_address)==inet_ntoa(dest_address))&&(H-Table[addr].source_port==s_port)&&(H-Table[addr].dest_port==d_port)){returntrue;}HashNode*p=H-Table[addr].next;while(p!=NULL){if((p-sum==key)&&(inet_ntoa(p-ip_source_address)==inet_ntoa(source_address))&&(inet_ntoa(p-ip_dest_address)==inet_ntoa(dest_address))&&(p-source_port==s_port)&&(p-dest_port==d_port)){returntrue;9}elsep-next;}returnfalse;}2./*获得设备名,检索机器所连接的所有网络适配器,并在屏幕中显示适配器的名称和详细信息,用户可以输入适配器编号选择指定的适配器用来捕获,代码与结果显示如下:*/if(pcap_createsrcstr(source,PCAP_SRC_IFLOCAL,NULL,NULL,NULL,errbuf)==-1){printf(%s\n,errbuf);exit(-1);}/*获得设备列表*/if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf)==-1){fprintf(stderr,Errorinpcap_findalldevs:%s\n,errbuf);exit(1);}/*打印列表*/for(d=alldevs;d;d=d-next){printf(%d.%s,++i,d-name);if(d-description)printf((%s)\n,d-description);elseprintf((Nodescriptionavailable)\n);}if(i==0){printf(\nNointerfacesfound!MakesureWinPcapisinstalled.\n);return-1;}while(inum1||inumi){printf(Entertheinterfacenumber(1-%d):,i);scanf(%d,&inum);10if(inum1||inumi){printf(输入有误,请重新输入!!\n);}}截图如下:3./*选择过滤协议*/intchang1=0;printf(\n过滤协议如下:);
本文标题:网络流量在线分析系统的设计与实现
链接地址:https://www.777doc.com/doc-6692259 .html