监控IP包的流量.doc_第1页
监控IP包的流量.doc_第2页
监控IP包的流量.doc_第3页
监控IP包的流量.doc_第4页
监控IP包的流量.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

. 计算机网络 课程设计报告课 题: 监控IP包的流量 专 业 班 级: 计科10101班 姓名(学号): 张鸣宇(201017010103) : 李 玮(201017010143) 指 导 教 师: 梅晓勇 评阅意见:评定成绩: 指导老师签名: 年 月 日目 录一 目的和意义 从社会角度来说,随着人们对Internet的依赖性越来越高,网络传输的业务类型变得缤纷多彩,在此背景下,需要对网络状况,网络性能进行准确的检测和评估,而这次课程设计正是对流量工程内容研究。从学习的角度来说,此次课程设计将我们带入网络编程领域,进一步网络知识的应用,监控IP包的流量课程设计让我们进一步了解IP协议的基本内容,对于掌握TCP/IP协议的主要内容和学习网络课程是十分重要的,此外,也加深了对Winpcap的理解和运用能力,同时也增长了知识,开阔了视野,对于以后的学习有很大的帮助。 二基本原理2.1概述1. IP协议IP是TCP/IP模型中的网络层协议,又称为互联网协议,是支持网间互连的数据报协议,它与TCP协议一起构成了TCP/IP协议族的核心。它提供网间连接的完善功能,包括IP数据报规定互联网范围内的IP地址格式2。在因特网中IP协议是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。IP地址具有唯一性,根据用户性质的不同,可以分为不同的类别。IP协议的特点如下:(1) IP协议是一种不可靠、无连接的数据报传送协议。(2) IP协议是点对点的网络层通信协议。(3) IP协议向通信层隐藏了物理网络的差异。(4) IP协议以一种数据报的形式传输数据,每个数据报独立传输,可能通过不同路径传输,因此可能不按顺序到达目的地,或者出现重复。2. 关于Winpcap库Winpcap(windows packet capture)是windows平台下一个买费的、公共的基于windows的网络接口API库。主要为win32应用程序提供访问网络底层的能力。Winpcap的主要功能在于独立于主机协议(如TCP/IP)发送和接收原始数据报。也就是说,Winpcap不能阻塞、过滤或控制其他应用程序数据报的收发,它只是监听共享网络上传送的数据报。因此,它不能用于QoS调度程序或个人防火墙。其功能有:(1) 捕获原始数据包,包括在共享网络上各主机发送接收的以及相互之间 交换的数据包;(2) 捕获原始数据包,包括在共享网络上各主机发送接收的以及相互之间 (3) 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;(4) 在网络上发送原始数据包;(5) 收集网络通信过程中的统计信息。 2.2作用对IP包流量的控制主要是通过用VC+编程实现对网络中IP数据包流量的统计,实际上是编制程序,监控网络,捕获一段时间内网络上的IP数据包,按IP数据包的源地址统计出该源地址在该时间段内发出的IP包的个数。程序中会用到Winpcap,它主要功能在于独立于主机协议发送和接收原始数据报。本次课程设计中用VC+实现基于Winpcap的网络数据包的捕获和统计,基于Winpcap的应用程序将根据获取网络设备列表;选择网卡并打开;设置过滤器;捕获数据包或者发送数据包;列出网卡列表,让用户选择可用的网卡的步骤进行编写三 需求分析 3.1 系统功能需求分析近年来,网络病毒的出现和传播更加剧了网络状况的复杂和不稳定性.在此背景下,需要对网络状况,网络性能进行准确的检测和评估,而这些正是流量工程的研究内容.而流量工程的主要任务是测量和评估网络的运行状况,性能。并能够容易地使网络的最终用户看到和理解评估结果,能够对网络中的突发时间能够做出积极有效的反应,以及研究和改进网络协议,网络工作模式的机制,以促进网络服务的可靠性,保证网络的正常运行。而我们在在这个课程设计里将编制一个程序,监控网络,捕获一段时间内网络上的IP数据包,按IP数据包的源地址统计出该源地址在该时间段内发出的IP包的个数,将其写入日志文件中或用图形表示出来。3.2功能函数部分本次课程设计主要运用了以下功能函数:1 系统函数1) pcap_findalldevs(&alldevs,errbuf) 说明:用来获得网卡的列表,alldevs为网络适配器的列表的指针; char型指针,当打开列表错误时返回错误信息2) pcap_open_live(head-name,1000,1,1000,errbuf)说明:以混杂模式方式打开网卡,name为要抓取的网络设备的字符串,最大可抓取的字节长度为1000字节,超时时间为1000ms,当在超时内上没有数据到来时对网卡的读操作将返回错误信息3) pcap_compile(fp,&fcode,packet_filter,1,netmask)说明:编译过滤器,fp是对网卡描述符,型号、名字,fcode是一个 bpf_program结构的指针,在pcap_compile()函数中被赋值。1表示对结果代码进行优化。netmask参数指定本地网络的网络掩码4) pcap_setfilter(fp,&fcode) 5) 说明:设置过滤器,用来联系一个在内核驱动上过滤的过滤器,一旦调用,这时所 有网络数据包都将流经相关的过滤器,并拷贝到应用程序中,把pcap_compile()构造的filter设置到fp上,6) pcap_freealldevs(alldevs) 7) 说明:释放网络适配器列表空间8) pcap_next_ex(fp,&header,&pkt_data) 说明:该函数从网络设备中读取一个数据包,fp-设备指针,header-数据包头,pkt_data-数据包内容2. 自定义函数1) main(int argc,char *argv) 说明:主函数通过调用主函数和其他自定义函数,实现IP包流量监控的功能,argv是argc第0个参数,其中第0个参数是程序的全名,以后的参数,命令行后面跟的用户输入的参数。2) addNode(long sourceIP) 说明:将IP结点加入链表四 概要设计4.1编程环境Microsoft Visual C+ 6.04.2模块分析课程设计的主要目的是接收统计IP包,所以主要任务就是设置网卡以及相关的一系列操作,以下为一些主要功能模块: (1)取得当前网络设备列表(在标准输出上显示,以让用户进行选择)。(2)将用户选择的Ethernet卡以混杂模式打开,以接收到所有的数据包。(3)编译并设置过滤器,此处的过滤器为“IP”。(4)捕获IP包并按包的源地址进行统计(用链表结构进行实现)其程序流程图如下:开始将包源地址加入列表结束否获取网卡列表选取Ethernet网卡打开网卡编译并设置过滤器捕获包是否超时显示链表内容是五 详细设计 5.1具体实现过程 首先获取网卡列表是为了得到网卡的相关信息,以便于用户进行选择,选取Ethermet网卡是用户所选择的网卡类型,编译设置过滤器是为了编译并设置过滤器是为了只捕获网络数据流的某些数据,打开网卡既将网卡设置为混杂(统计)模式是为了接受所有经过网卡的数据包,包括不是发给本机的数据包,开始主循环以是否超时为判断条件,循环体内主要有捕获IP 数据包、将IP包的源地址加入链表、条件判断,循环结束后输出链表内容,程序至此结束。具体的实现如下: 1 取得网络适配器列表并找到要监听的网络适配器,alldevs是pcap_if_it指针,指向链表头,errbuf是char类型数组,存储错误信息3。for(d=alldevs;d;d=d-next) /列出网卡列表,让用户进行选择cout+j:name;if(d-description) cout descriptionendl; /描述网络适配器接口for(d=alldevs,i=1;inext,i+); /找到选择的网络适配器head=d; / 2 采用混杂模式打开网络适配器if(fp=pcap_open_live(head-name,1000,1,1000,errbuf)=NULL)coutnUnable to open the adapter.endl;pcap_freealldevs(alldevs);return;3 编译并设置过滤器if(pcap_compile(fp,&fcode,packet_filter,1,netmask)0) /编译并设置过滤器coutnUnable to compile the packet filter.Check the syntax.n;pcap_freealldevs(alldevs);return;if(pcap_setfilter(fp,&fcode)0) /设置滤波器cout=0)time(&end); /获得系统时间if(end-beg=min*60) /计算系统时间break;if(res=0)continue; /超时ip_header *ih;/找到I头得位置ih=(ip_header*)(pkt_data+14); /14为以太头的长度link.addNode(ih-saddr); /将源IP地址加入链表5.2主要数据结构 1) 此次课程设计主要采用了链表数据结构,具体的实现如下:class NodeListIPNode *pHead;IPNode *pTail;public:NodeList() pHead=pTail=NULL; NodeList() if(pHead!=NULL) IPNode *pTemp=pHead; pHead=pHead-pNext; delete pTemp; 2)IP包头部结构 /struct ip_headerunsigned char ver_ihl; /版本号(4位)+头部长度(4位)unsigned char tos; /服务类型unsigned short tlen; /总长度unsigned short identification; /标识unsigned short flags_fo; /标志+片偏移unsigned char tll; /生存时间unsigned char proto; /协议unsigned short crc; /校验码DWORD saddr; /源地址DWORD daddr; /目的地址unsigned int op_pad; /选项+填充六 实现与测试 6.1实现与测试 1)取得网络适配器列表并找到要监听的网络适配器号 . 2)正在监听IP数据包,时间为一分钟3)最后的监听的结果七 心得结论在这一周的课程设计里,在老师同学帮助自己以及自己的努力下,我学到了很多的东西。在此期间老师给了我们很大的帮助,老师的认真负责让我们不再马马乎乎对待自己的学业,在课堂上老师也以同样的责任心来督促我们认真学习,对于不懂的问题都会一一解答,现在也如此,这对于我们以后步入社会之后有很大的帮助,无论做任何事情都要认真负责,对自己负责同时也对别人负责。 在老师的指导之余,我还学到了一定的课外知识,以前从未听过Winpcap,现在我知道了它对于捕获网络上的一些数据信息很有帮助,从而丰富了我的知识,同时也知道了如何去利用它来为自己服务,这是一个很大的进步。 做这个题目我从网上找了很多的资料。但也不能盲目相信找来的资料,要通过自己的验证没错误后才能用。不但是于此,别的任何学习方面也一样。在自己查找资料的同时也锻炼了我及时捕获有用知识的能力,我想这是我现在乃至以后最大的一个财富,一个人最重要的就是要懂得如何去学,学习不是被动的,而是主动的,只有这样我们才能学得到对于我们自己有帮助的东西,用VC+编程实现IP数据报流量统计,开始这对于我来说是是一个很模糊的概念,但是当我在查找了很多资料之后我不再迷茫,而是慢慢跟着我所要找的资料来靠近我所要达到的目标。这是我们每个人所要学会

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论