监控IP包的流量.docx
- 文档编号:6478262
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:10
- 大小:75.51KB
监控IP包的流量.docx
《监控IP包的流量.docx》由会员分享,可在线阅读,更多相关《监控IP包的流量.docx(10页珍藏版)》请在冰豆网上搜索。
监控IP包的流量
计算机网络课程设计报告
课题:
监控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(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.0
4.2模块分析
课程设计的主要目的是接收统计IP包,所以主要任务就是设置网卡以及相关的一系列操作,以下为一些主要功能模块:
(1)取得当前网络设备列表(在标准输出上显示,以让用户进行选择)。
(2)将用户选择的Ethernet卡以混杂模式打开,以接收到所有的数据包。
(3)编译并设置过滤器,此处的过滤器为“IP”。
(4)捕获IP包并按包的源地址进行统计(用链表结构进行实现)
其程序流程图如下:
五详细设计
5.1具体实现过程
首先获取网卡列表是为了得到网卡的相关信息,以便于用户进行选择,选取Ethermet网卡是用户所选择的网卡类型,编译设置过滤器是为了编译并设置过滤器是为了只捕获网络数据流的某些数据,打开网卡既将网卡设置为混杂(统计)模式是为了接受所有经过网卡的数据包,包括不是发给本机的数据包,开始主循环以是否超时为判断条件,循环体内主要有捕获IP数据包、将IP包的源地址加入链表、条件判断,循环结束后输出链表内容,程序至此结束。
具体的实现如下:
1取得网络适配器列表并找到要监听的网络适配器,alldevs是pcap_if_it指针,指向链表头,errbuf是char类型数组,存储错误信息[3]。
for(d=alldevs;d;d=d->next)//列出网卡列表,让用户进行选择
{cout<<++j<<":
"<
if(d->description)
cout<<""< } for(d=alldevs,i=1;i head=d;// 2采用混杂模式打开网络适配器 if((fp=pcap_open_live(head->name,1000,1,1000,errbuf))==NULL) { cout<<"\nUnabletoopentheadapter."< 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数据报流量统计,开始这对于我来说是是一个很模糊的概念,但是当我在查找了很多资料之后我不再迷茫,而是慢慢跟着我所要找的资料来靠近我所要达到的目标。 这是我们每个人所要学会的。 在课程设计的一周时间里,我有很多搞不明白的地方,请教了许多人,在这里要感谢他们的帮助.他们自己虽然很忙,但还是不遗余力的帮助我,让我受益不浅.让我明白了理论知识的重要和应用于实践的伟大之处. 在这课程设计中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。 因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前! 参考书籍 1.计算机网络第五版谢希仁 2.计算机网络课程设计吴功宜
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 监控 IP 流量