您好,欢迎访问三七文档
..页脚.计算机网络课程设计报告课题:监控IP包的流量专业班级:计科10101班(学号):鸣宇(3):玮(3)指导教师:梅晓勇目录评阅意见:评定成绩:指导老师签名:年月日..页脚.一目的和意义从社会角度来说,随着人们对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(windowspacketcapture)是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(intargc,char*argv[])说明:主函数通过调用主函数和其他自定义函数,实现IP包流量监控的功能,argv[]是argc第0个参数,其中第0个参数是程序的全名,以后的参数,命令行后面跟的用户输入的参数。2)addNode(longsourceIP)说明:将IP结点加入链表..页脚.四概要设计4.1编程环境MicrosoftVisualC++6.04.2模块分析课程设计的主要目的是接收统计IP包,所以主要任务就是设置网卡以及相关的一系列操作,以下为一些主要功能模块:(1)取得当前网络设备列表(在标准输出上显示,以让用户进行选择)。(2)将用户选择的Ethernet卡以混杂模式打开,以接收到所有的数据包。(3)编译并设置过滤器,此处的过滤器为“IP”。(4)捕获IP包并按包的源地址进行统计(用链表结构进行实现)其程序流程图如下:..页脚.开始将IP包源地址加入列表结束否获取网卡列表选取Ethernet网卡打开网卡编译并设置过滤器捕获IP包是否超时显示链表内容是..页脚.五详细设计5.1具体实现过程首先获取网卡列表是为了得到网卡的相关信息,以便于用户进行选择,选取Ethermet网卡是用户所选择的网卡类型,编译设置过滤器是为了编译并设置过滤器是为了只捕获网络数据流的某些数据,打开网卡既将网卡设置为混杂(统计)模式是为了接受所有经过网卡的数据包,包括不是发给本机的数据包,开始主循环以是否超时为判断条件,循环体主要有捕获IP数据包、将IP包的源地址加入链表、条件判断,循环结束后输出链表容,程序至此结束。具体的实现如下:1取得网络适配器列表并找到要监听的网络适配器,alldevs是pcap_if_it指针,指向链表头,errbuf是char类型数组,存储错误信息[3]。for(d=alldevs;d;d=d-next)//列出网卡列表,让用户进行选择{cout++j:d-name;if(d-description)coutd-descriptionendl;//描述网络适配器接口}for(d=alldevs,i=1;ik;d=d-next,i++);//找到选择的网络适配器head=d;//2采用混杂模式打开网络适配器if((fp=pcap_open_live(head-name,1000,1,1000,errbuf))==NULL){cout\nUnabletoopentheadapter.endl;pcap_freealldevs(alldevs);return;}3编译并设置过滤器if(pcap_compile(fp,&fcode,packet_filter,1,netmask)0)//编译并设置过..页脚.滤器{cout\nUnabletocompilethepacketfilter.Checkthesyntax.\n;pcap_freealldevs(alldevs);return;}if(pcap_setfilter(fp,&fcode)0)//设置滤波器{cout\nErrorsettingthefilter.\n;pcap_freealldevs(alldevs);return;}4在给定的时间循环捕获IP数据包,并将该IP数据包的源地址加入链表while((res=pcap_next_ex(fp,&header,&pkt_data))=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)此次课程设计主要采用了链表数据结构,具体的实现如下:classNodeList{IPNode*pHead;IPNode*pTail;public:NodeList(){pHead=pTail=NULL;}~NodeList(){if(pHead!=NULL){IPNode*pTemp=pHead;pHead=pHead-pNext;deletepTemp;}}2)IP部结构/structip_header{unsignedcharver_ihl;//版本号(4位)+头部长度(4位)unsignedchartos;//服务类型unsignedshorttlen;//总长度unsignedshortidentification;//标识unsignedshortflags_fo;//标志+片偏移unsignedchartll;//生存时间unsignedcharproto;//协议unsignedshortcrc;//校验码DWORDsaddr;//源地址..页脚.DWORDdaddr;//目的地址unsignedintop_pad;//选项+填充}六实现与测试6.1实现与测试1)取得网络适配器列表并找到要监听的网络适配器号.2)正在监听IP数据包,时间为一分钟..页脚.3)最后的监听的结果..页脚...页脚.七心得结论在这一周的课程设计里,在老师同学帮助自己以及自己的努力下,我学到了很多的东西。在此期间老师给了我们很大的帮助,老师的认真负责让我们不再马马乎乎对待自己的学业,在课堂上老师也以同样的责任心来督促我们认真学习,对于不懂的问题都会一一解答,现在也如此,这对于我们以后步入社会之后有很大的帮助,无论做任何事情都要认真负责,对自己负责同时也对别人负责。在老师的指导之余,我还学到了一定的课外知识,以前从未听过Winpcap,现在我知道了它对于捕获网络上的一些数据信息很有帮助,从而丰富了我的知识,同时也知道了如何去利用它来为自己服务,这是一个很大的进步。做这个题目我从网上找了很多的资料。但也不能盲目相信找来的资料,要通过自己的验证没错误后才能用。不但是于此,别的任何学习方面也一样。在自己查找资料的同时也锻炼了我及时捕获有用知识的能力,我想这是我现在乃至以后最大的一个财富,一个人最重要的就是要懂得如何去学,学习不是被动的,而是主动的,只有这样我们才能学得到对于我们自己有帮助的东西,用VC++编程实现IP数据报流量统计,开始这对于我来说是是一个很
本文标题:监控IP包的流量
链接地址:https://www.777doc.com/doc-7374432 .html