网络协议分析课程设计.doc

上传人:仙人指路1688 文档编号:2401152 上传时间:2023-02-17 格式:DOC 页数:9 大小:476.50KB
返回 下载 相关 举报
网络协议分析课程设计.doc_第1页
第1页 / 共9页
网络协议分析课程设计.doc_第2页
第2页 / 共9页
网络协议分析课程设计.doc_第3页
第3页 / 共9页
网络协议分析课程设计.doc_第4页
第4页 / 共9页
网络协议分析课程设计.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《网络协议分析课程设计.doc》由会员分享,可在线阅读,更多相关《网络协议分析课程设计.doc(9页珍藏版)》请在三一办公上搜索。

1、 计算机网络课程设计报告书设计题目: 协议分析 专 业: 计算机科学与技术 班 级: 10 级 1 班 姓 名: 齐特(组长) 宁文倩 谢晗 指导教师: 苏宪利 完成日期: 2012年1月3日 目 录1 概述11.1 目的11.2选题12 课程作业过程及结果12.1 编程环境及工具12.2 实现原理分析12.3 综合设计22.3.1 协议分析器总体结构的设计与实现22.3.2 数据捕获模块的设计与实现22.3.3 协议解析模块的设计与实现33 课程大作业总结43.1 小结43.2 改进设想6附录 关键代码61 概述1.1 目的(1) 编写一个简化的协议分析器,了解数据通过网络传输时的封装与解析

2、过程,加深理解TCP/IP协议栈的工作原理和网络应用软件开发能力(2) 掌握Winpcap编程与抓包方法;使用Winpcap库的流量统计和向网络中发包等特性。1.2选题协议分析器程序2 课程作业过程及结果2.1 编程环境及工具(1)操作系统:Windows 7(2)开发语言:C语言(3)编译环境:MS Visual C+6.0;(4)第3方函数库:Winpcap3.1;2.2 实现原理分析协议分析器工作在网络环境中的底层,拦截所有正在网络上传送的数据,并且通过相应的解析处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体拓扑布局。当应用程序通过IP网络传送数据时,数据就被送入TCP/

3、IP协议栈中,然后由上至下逐一通过每一层,直到最后被当做一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息这个过程被称作封装。通过以太网传输的比特流被称作帧。在传输的另一端,当目的主机收到一个以太网数据帧时,数据就开始从协议栈有底向上逐层解析,去掉各层协议所加上的报文头部。每层协议均要检查报头中的协议标识字段,以确定要接收数据的上层协议,最终从报文中解析出应用层数据后交给应用程序处理。协议分析器就是从网络中捕获数据包并对其进行解析的过程。因此我们需要了解每层协议所规定的报文格式,然后由底向上逐层对数据包进行解码,最后将分析的结果显示出来。2.3 综合设计2.3.1 协议分析器总体结

4、构的设计与实现协议分析器的整体结构按功能分成3个部分,自底向上分别是数据捕获模块、协议解析模块和用户显示模块。图1 协议分析器整体结构图2.3.2 数据捕获模块的设计与实现数据捕获模块的主要功能是进行数据采集,这个是整个系统的基础和数据来源。程序使用Winpcap来捕获网络中原始数据包。Winpcap是数据包捕获的开放代码函数库,它可以完成以下主要功能:(1) 捕获网络中的的原始数据包。(2) 使用用户自定义规则对数据包进行过滤。(3) 发送用户自己构造的数据包到网络中。(4) 统计网络流量。(5) 使用Winpcap捕获数据包的算法使用Winpcap来捕获数据包的算法一般分为以下几步:(1)

5、 获取并列出当前网络设备列表。(2) 由用户选择并打开指定网卡。(3) 根据过滤规则设置过滤器。(4) 捕获数据包并进行解析处理。 编程流程如图2所示。 图2 数据包捕获流程图2.3.3 协议解析模块的设计与实现该模块的主要功能就是对捕获的数据包按照数据链路层(MAC)、网络层(IP、ARP)、传输层(TCP、UDP、ICMP)的层次结构自底向上进行解析,最后将解析结果显示输出。协议解析过程如图3所示。图3协议解析流程图(1).解析ARP数据包 此处不做过多说明,主要代码分析见本文第5部分。图4 ARP报文结构(2).解析IP数据包 为了提高效率,可以使用链表结构存储IP数据包信息,同时还可以

6、使用模板类map来存储IP数据包信息。图5 IP报文结构 3 课程大作业总结3.1 小结(1).启动:程序启动后首先出现网卡选择对话框,如图3-1所示,在设备列表中选择需要进行捕获的网卡。图3-1 网卡选择界面(1).界面:图3-2 程序界面3.2 改进设想程序解析了ARP、IP,但仍不全面,例如没有包括HTTP等协议,以后可对可解析的协议类型作进一步的扩充。附录 关键代码 #include pcap.h/*packet handler 函数原型*/void packet_handler(u_char *param, const struct pcap_pkthdr *header, cons

7、t u_char *pkt_data);int main() pcap_if_t *alldevs;/网卡列表指针 pcap_if_t *d;/网卡列表指针 int inum; int i = 0; pcap_t *adhandle; char errbufPCAP_ERRBUF_SIZE;/ /错误消息缓冲区 /获取本机设备列表 if(pcap_findalldevs(&alldevs, errbuf) = -1)/返回网卡列表,alldevs指向表头 printf(Error in pcap_findalldevs: %sn, errbuf);/获取本地网络设备列表 exit(1); /打

8、印列表 for(d = alldevs; d != NULL; d = d-next) printf(%d. %s, +i, d-name); if(d-description)/如果有描述则输出详细信息 printf( (%s)n, d-description); else printf( (No description available) n);/提示没有描述 之后输出网卡号 printf(Enter the interface number (1-%d):, i); scanf(%d, &inum); if(inum i) printf(nInterface number out of

9、 range.n);/错误信息 /释放设备列表 pcap_freealldevs(alldevs); return -1; /跳转到选中的适配器 for(d = alldevs, i = 0; i next, i+); /打开设备 if(adhandle = pcap_open(d-name,65536,0,1000,NULL,errbuf) = NULL) printf(nUnable to open the adapter.%s is not supported by WinPcapn, d-name); /释放设备列表 pcap_freealldevs(alldevs); return

10、-1; printf(nlistening on %s. n, d-description);/进行描述 /释放设备列表 pcap_freealldevs(alldevs); /开始捕捉 pcap_loop(adhandle, 0, packet_handler, NULL); return 0;/每次捕捉到数据包时,libpcap都会自动调用这个回调函数void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) struct tm *ltime; char timestr16; time_t local_tv_sec; /将时间戳转换成可识别的格式 local_tv_sec = header-ts.tv_sec;/时间 printf(%d n, local_tv_sec); ltime = localtime(&local_tv_sec); strftime(timestr, sizeof(timestr), %H %M %S, ltime); printf(%s,%.6d len:%dn, ctime(&local_tv_sec), header-ts.tv_usec, header-len);

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号