《通信课程设计报告编写一个TCP报文分析小工具.doc》由会员分享,可在线阅读,更多相关《通信课程设计报告编写一个TCP报文分析小工具.doc(20页珍藏版)》请在三一办公上搜索。
1、上海应用技术学院课程设计报告课程名称 计算机通信技术课程设计_设计题目 编写一个TCP报文分析小工具_课程名称计算机通信技术课程设计课程代码设计题目题目A:编写一个TCP报文分析小工具题目B:编程实现FTP协议分析题目序号设计时间2011年 06 月13 日2011 年 06 月 24 日系(院)计算机专业网络工程班级一、 课程设计任务(条件)、具体技术参数(指标)1. 在指导书提供的课程设计题目中选择一题或自选(自选需经过指导教师认可)2. 每个题目每人独立完成,题目选定后不可更换。3. 用户提供的主操作界面应该方便用户的操作。4. 最后提交的课程设计成果包括:a) 课程设计报告电子稿。b)
2、 提交需求分析报告、设计报告、系统测试用例设计及测试报告、用户手册。c)源程序文件。d)可执行程序文件。二、 对课程设计成果的要求(包括课程设计说明书、图纸、图表、实物等软硬件要求)1. 分析课程设计题目的要求;2. 写出详细设计说明;3. 编写程序代码,调试程序使其能正确运行;4. 设计完成的软件要便于操作和使用,有整齐、美观的使用界面;5. 设计完成后提交课程设计报告、设计文档、源代码文件的电子文档。三、 课程设计工作进度计划:第一天 选择课程设计题目,分析课题的要求,确定设计方案;第二天 按功能模块编写详细设计说明;第三天 绘制程序流程图;第四天 程序编写与调试;第五天 程序编写与调试;
3、第六天 程序编写与调试;第七天 程序编写与调试;第八天 写课程设计报告; 第九天 提交课程设计报告;第十天 面试或答辩。四、 主要参考资料1Windows网络程序设计, 夏靖波等编,西安电子科技大学出版社,20072网络程序设计教程,吴礼发编,北京希望电子出版社,20023TCP/IP协议详解卷一:协议,W.Richard Stevens,Addison Wesley/Pearson4TCP/IP协议详解卷二:实现,W.Richard Stevens,Addison Wesley/Pearson5TCP/IP协议详解卷三:事务协议,W.Richard Stevens,Addison Wesle
4、y/Pearson6计算机通信技术课程设计实验指导书指导教师(签名): 2011.06.12 教研室主任(签名):2011.06.11目录1 目的及要求1.1 课程设计目的本课程设计是计算机科学与技术专业、网络工程专业重要的实践性环节之一,是在学生学习完计算机通信技术课程后进行的一次全面的综合练习。通过课程设计,使学生进一步掌握计算机网络通信的基本方法;网络协议的基本原理;掌握网络通信和网络协议的技术架构;深刻领会软件设计方法;提高程序设计文档的撰写能力等。1.2 课程设计要求在提供的课程设计题目中任意选择一题,题目选定后不可更换。(1) 要求在设计的过程中,完成清晰的功能设计。(2) 要求系
5、统架构合理,模块划分清晰。(3)用户界面设计,以菜单形式体现各个功能,供用户选择。各功能之间原则上无先后次序。(4)编写程序代码,调试程序使其能正确运行(5)提交课程设计报告、相关文档及源代码。2 课程设计内容说明2.1 课程设计的题目编写一个TCP报文分析小工具2.2 具体设计要求实现一个简单的局域网报文抓取工具,对在网络共享域中抓取的数据包进行分析,并向屏幕输出TCP报文头部的每一个字段信息。要求:(1) 能实现共享域的数据包抓取。(2) 对抓到的数据包进行解析,要求能够解析出数据包中TCP的报文头部每一个域的信息。(3) 参考软件wireshark。2.3 设计实现思路根据系统功能要求,
6、可以将问题解决分为以下步骤:(1) 回顾TCP协议报文头部的格式。(2) 寻找网络共享域中,数据包抓取的开发工具,目前比较常见的是WinPcap。(3) 利用WinPcap的数据包抓取功能,对抓到的数据包进行过滤,分析。(4) 解析数据报文,输出每一个域的对应值。(5) 利用wireshark软件,对输出值进行对比验证软件的功能和正确性。2.4 实验环境说明用VC+编译抓包程序,用Winpcap实现数据包的抓取2.5课题的系统设计2.5.1 设计思路(1)回顾TCP和IPV4的首部格式0 4 8 16 24 32版本首部长度服务类型总长度标示标志片偏移量TTLProtocol首部校验和源站ip
7、 address目的ip addressIp选项填充数据图1 IPv4首部格式IPv4首部格式说明:1. 版本:4b,包含当前运用的ip版本的信息2. 首部长度:4b,以4B为单位的ip首部的长度3. TOS服务类型:8b指明当前如何处理数据报文4. 总长度:16b,以字节为单位的整个数据报文的长度5. 标示:16b,整数,源主机赋予数据报的唯一标识6. 标志:3b,只有低2位有效中间1位是DF标志,为1是表示数据报不能被分片,为0表示可以分片7. 片偏移量:13b指出本数据报文片中数据相对于初始报文的数据偏移量,以8字节为单位计算偏移量8. TTL:1byte,设计的初衷是用来指明数据报在互
8、联网上的允许保留的时间以秒为单位9. 协议:1字节,指明数据报数据区的格式10. 首部校验和:16b用于首部的校验11. 源地址和目标ip地址:各占32b指明数据报的发送者和最终的接受者12. ip选项,长度可变,主要用于控制和测试两大目的SportDert port序列号确认号数据偏移保留URGACKPSHRSTSYNFIN窗口校验和紧急指针选项(长度可变)填充图2 Tcp报文的首部Tcp报文的首部格式说明:1. 源端口和目的端口,端口是传输层和应用层的接口2. 序号:tcp是面向字节流的,tcp传输的报文可以看做是连续的字节流3. 确认号:希望收到的下一个报文首部字段的序列号的值4. 数据
9、偏移:指出tcp报文段的首部长度,以 4byte为单位5. 标志位:用于区分不同类型的tcp报文6. 窗口:该字段在传输过程中,动态变化,表明允许对方发送的数据量7. 校验和:检验和字段检查的范围包括伪首部,tcp首部和数据部分8. 紧急指针:只在url=1时才使用,指明该报文中有紧急数据的字节数,伪首部中的协议字段值一般为69. 选项:长度可变040byte(2)确定开发工具。确定使用VC+和Winpcap开发工具来实现共享域中数据包的抓取。(3)上网查阅关于Winpcap的使用方法和抓取数据包所要用的各种函数。(4)用VC+编程来具体实现数据包的抓取。(5)首先获先利用Winpcap中的p
10、cap_findalldevs函数来获得网卡列表,并将其打印出来。(6)利用Winpcap中的pcap_open_live函数来打开选择的网卡。(7)利用Winpcap中的pcap_compile来起到过滤作用,只接受TCP和IPV4的内容(8)使用回调函数pcap_loop(adhandle, 10, packet_handler, NULL)来捕获数据包,并打印TCP的报文首部2.5.2 系统功能模块图系统程序与辅助软件一起运行TCP IP数据包结构分析定义程序调用相关函数对所抓起的数据包进行分段分析Wincap抓包分析IP首部结构定义TCP首部结构定义利用程序对获取的包进行过滤出tcpW
11、INCAP对流经网卡的数据包进行抓取对相关的数据包的来源和去向分析调用之前定义的结构函数进行分段分析图3 系统功能模块图2.5.3系统流程图开始检测是否有wincap检查网卡否是打印网卡信息,要求用户自己选择网卡对用户输入进行检测是否符合范围打印输出抓取的tcp包信息(10个)结束否是否是给出提示信息要求用户进行输入,并对用户输入进行检查输入N输入Y2.5.4 关键程序代码main() pcap_if_t *alldevs; pcap_if_t *d; int inum; int i=0; pcap_t *adhandle; char errbufPCAP_ERRBUF_SIZE;u_int
12、netmask;struct bpf_program fcode;char k; /* 获得网卡的列表 */ if (pcap_findalldevs(&alldevs, errbuf) = -1) fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf); exit(1); /* 打印网卡信息 */ for(d=alldevs; d; d=d-next) printf(%dn, +i); printf(%sn, d-name); if (d-description) printf( (%s)n, d-description); else p
13、rintf( (No description available)n); if(i=0) printf(nNo interfaces found! Make sure WinPcap is installed.n); return -1; printf(Enter the interface number (1-%d):,i); scanf(%d, &inum); /输入要选择打开的网卡号 if(inum i) /判断号的合法性 printf(nInterface number out of range.n); /* Free the device list */ pcap_freeallde
14、vs(alldevs); return -1; /* 找到要选择的网卡结构 */ for(d=alldevs, i=0; inext, i+); /* 打开选择的网卡 */ if ( (adhandle= pcap_open_live(d-name, / 设备名称 65536, / portion of the packet to capture. / 65536 grants that the whole packet will be captured on all the MACs. 1, / 混杂模式 1000, / 读超时为1秒 errbuf / error buffer ) ) =
15、NULL) fprintf(stderr,nUnable to open the adapter. %s is not supported by WinPcapn); /* Free the device list */ pcap_freealldevs(alldevs); return -1; printf(nlistening on %s.n, d-description); /* At this point, we dont need any more the device list. Free it */ pcap_freealldevs(alldevs); /*过滤器*/if (d-
16、addresses != NULL) /* 获取接口第一个地址的掩码 */ netmask=(struct sockaddr_in *)(d-addresses-netmask)-sin_addr.S_un.S_addr; else /* 如果这个接口没有地址,那么我们假设这个接口在C类网络中 */ netmask=0xffffff; /compile the filte if (pcap_compile(adhandle, &fcode, ip and tcp, 1, netmask) 0) fprintf(stderr,nUnable to compile the packet filte
17、r. Check the syntax.n); /* 释放设备列表 */ pcap_freealldevs(alldevs); return -1; /set the filter if (pcap_setfilter(adhandle, &fcode) 0) fprintf(stderr,nError setting the filter.n); /* 释放设备列表 */ pcap_freealldevs(alldevs); return -1; /* 开始捕获包 */ pcap_loop(adhandle, 10, packet_handler, NULL);while(1)printf(
18、n是否想要继续抓包(Y/N): );getchar();k=getchar();if(k=Y)pcap_loop(adhandle, 10, packet_handler, NULL);else if(k=N)break;else printf(n输入不合法,请重新输入!n);continue; return 0;2.6 调试过程图4 运行结果示例1图5 运行结果示例2图6 运行结果示例3图7 运行结果示例4图8 运行结果示例5图9 运行结果示例62.7 程序运行测试报告图10 运行结果测试1图11 运行结果测试23 遇到的问题和解决方法在本次的课程设计中,我选择了 题目A:编写一个TCP报文分析小工具,在程序的编写过程中,遇到了不少的问题。首先,最大的问题是对Winpcap不了解,不知道如何使用Winpcap来抓取数据包,并且对Winpcap