



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.目录33 3.4:.5: .6 .6 : .6专业 .专注.一、课程设计目的随着 Internet技术的发展 ,基于 IP 协议的应用成为网络技术研究与软件开发的一个重要基础 ,因此学习网络层以基本概念,了解 IP 协议的基本内容 ,对于掌握 TCP/IP 协议的主要内容和学习网络课程是十分重要的,通过本次课程设计,有助于熟悉 IP 包格式和加深对IP 协议的理解 。二、课程设计要求编制程序 ,监控网络 ,捕获一段时间内网络上的IP 数据包,按 IP 数据包的源地址统计出该源地址在该时间段内发出的IP 包的个数 ,将其写入日志文件中或用图形表示出来 (建议用图形表示出统计结果)。程序的具体要
2、求如下 :用命令行运行 : IPStatistic time logfile其中, IPStatistic 是程序名 ;time 是设定的统计时间间隔 (单位为分钟 ,比如,2 表示 2 分钟); logfile 表示统计结果写入的日志文件名(若用图形表示统计结果则可以不选这个参数)。相关知识 :IP 是 ICP/IP 协议体系中的网络层协议,TCP、 UDP、ICMP 和 IGMP 等其他协议都是以 IP 协议为基础的 。IP 的特点如下 :( 1) IP 协议是一种不可靠 、无连接的数据报传送协议 。( 2) IP 协议是点对点的网络层通信协议 。专业 .专注.( 3) IP 协议向通信层
3、隐藏了物理网络的差异。三、课程设计主要思路分析1课程设计中的重点及难点( 1)程序中会用到 Winpcap, Winpcap是 Windows packet capture的缩写,这是 UNIX 下的 lipbcap 移植到 Windows 下的产物 ,是 Win32 环境下数据包捕获的开放代码函数库。 Winpcap由内核级的数据包过滤器,底层动态链接库( packet.dll )和一个高层的独立于系统的库 (wpcap.dll )组成 。Winpcap 提供以下功能 :1) 捕获原始数据报 ,包括共享网络上各主机发送/ 接收的数据报以及各主机之间交换的数据报 。2) 在数据报发往应用程序之
4、前,按照自定义的规则过滤某些特殊的数据报。3) 将用户构造的数据报发送到网络中。4) 统计网络的流量 。Winpcap 的主要功能在于独立于主机协议(如 TCP/IP)发送和接收原始数据报 。也就是说 ,Winpcap不能阻塞 、过滤或控制其他应用程序数据报的收发,它只是监听共享网络上传送的数据报。因此 ,它不能用于 QoS 调度程序或个人防火墙。基于 Winpcap 的应用程序一般按照下面几个步骤编写:1) 获取网络设备列表 。2) 选择网卡并打开 。3) 当捕获数据包时 ,可能需要设置过滤器 。4) 捕获数据包或者发送数据包。专业 .专注.Packet.dll 相关数据结构typedef
5、struct_ADAPTERADAPTER/ 描述一个网络适配器typedef struct_PACKET PACKET 具/ 描述一组网络数据报的结构typedef struct NetType NetType/ 描述网络类型的数据结构typedef struct npf_if_addr npf_if_addr /描述一个网络适配器的IP 地址struct bpf_hdr/ 数据报头部struct bpf_stat/ 当前捕获数据报( 2)列出网卡列表 ,让用户选择可用的网卡 。( 3)注意过滤器的使用 ,只需捕获 IP 所,别的包都需过滤掉 。2参考算法( 1)取得当前网络设备列表 (在标
6、准输出上显示 ,以让用户进行选择 )。( 2)将用户选择的 Ethernet 卡以混杂模式打开 ,以接收到所有的数据包 。( 3)设置过滤器 ,此处的过滤器 “IP”。( 4)捕获 IP 包并按包的源地址进行统计 (用链表结构进行实现 )。程序流程如图 1-1 所示:四、设计流程图 。专业 .专注.开始获取网卡列表选取 Ethermet 网卡打开网卡(混杂模式)编译设置过滤器捕获 IP包将IP 包源地址加入链表超时否?输出链表内容结束图 1-1 程序流程图五、运行结果 :安装好 WinPcap 软件,在 VC+ 界面上点击工具 -> 选项 -> 目录 。添加 Include专业 .
7、专注.文件夹下的所有文件和Lib 下的所有内容 ,调试完程序无误后 ,点击开始 > 运行 “cmd ”进入目标文件夹 Debug 下运行 IPI.EXE文件并加入参数 2 bl.txt 。 此时程序会检测电脑系统中的网卡数,然后选择程序运行时的网络接口,耐心等待两分钟后就会得到程序的运行结果.图 1-2 系统中网络接口数图 1-3 选择第一个网络接口图 1-4 1 分钟之后捕获的ip 地址和数据包专业 .专注.六、总结:通过本次计算机网络课程设计,我更加充分的理解了课本上的知识,并能够加以扩展,从而应用于实践当中,这几天的课程设计令我受益匪浅,我意识到我们所学的东西将来都是要付诸实践的,
8、所以一切要从实际情况出发,理论联系实际,这样才能真正发挥我们所具备的能力 。这次计算机网络课程设计历时二个星期,在整整十多天的日子里,可以说得是苦多于甜 ,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。以前对于编程工具的使用还处于一知半解的状态上 ,但是经过一段上机的实践,对于怎么去排错 、查错 ,怎么去看每一步的运行结果。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的 ,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的
9、过程中遇到问题,可以说得是困难重重 ,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固 。 这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解 。 同时, 在老师的身上我学得到很多实用的知识,在次我表示感谢 !同时 ,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!参考文献1 吴功宜胡晓英 .计算机网课程设计北京 :机械工业出版社 ,2007.12.专业 .专注.2 张荛学 郭国强 .计算机网络与 Internet 教程 (第二版 ) 北京 :清华大学出版社2
10、006.11.3 王春晓 赵艳标 .计算机网络教程 北京 :机械工业出版社 ,2005.08.4 张仁 何云 .计算机网络课程设计指导 北京 :清华大学出版社 2006.05.源代码 :/ 主程序#include <iostream.h>#include <iomanip.h>#include <fstream.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include "pcap.h"/#include "IPNodeL
11、ist.h"#pragma comment(lib,"Wpcap.lib")#pragma comment(lib,"Ws2_32.lib")/IP 包的头部包括struct ip_headerunsigned char ver_ihl;/ 版本号 (4 位)+ 头部长度 (4 位 )unsigned char tos;/ 服务类型unsigned short tlen;/ 总长度unsigned short identification;/ 标识专业 .专注.unsigned short flags_fo;/ 标志 + 片偏移unsigned
12、 char tll;/ 生存时间unsigned char proto;/ 协议unsigned short crc;/ 校验码DWORD saddr;/ 源地址DWORD daddr;/ 目的地址unsigned int op_pad;/ 选项+填充;class IPNodeprivate:long m_lIPAddress;/IP 地址long m_lCount;/ 发送数据包数public:IPNode *pNext;/ 指向下一个 IP 结点/ 构造函数IPNode(long sourceIP)m_lIPAddress=sourceIP;m_lCount=1;/ 初始化数据包个数为 1
13、/ 数据包个数加 1专业 .专注.void addCount()m_lCount+;/ 返回数据包个数long getCount()return m_lCount;/ 返回 IP 地址long getIPAddress()return m_lIPAddress;/ 结点链表class NodeListIPNode *pHead;IPNode *pTail;public:NodeList()专业 .专注.pHead=pTail=NULL;NodeList()if(pHead!=NULL)IPNode *pTemp=pHead;pHead=pHead->pNext;delete pTemp;
14、/IP 结点加入链表void addNode(long sourceIP)if(pHead=NULL)/ 当链表为空时pTail=new IPNode(sourceIP);pHead=pTail;pTail->pNext=NULL;else/ 不为空时专业 .专注.for(IPNode *pTemp=pHead;pTemp;pTemp=pTemp->pNext)/ 如果链表中存在此 IP,发送数据包个数加 1 if(pTemp->getIPAddress()=sourceIP)pTemp->addCount();break;/ 如果链表中没有此 IP,则加入链表if(p
15、Temp=NULL)pTail->pNext=new IPNode(sourceIP);pTail=pTail->pNext;pTail->pNext=NULL;/ 输出 IP 结点 ,即 IP 地址和其他送的 IP 包的个数ostream& print(ostream & out)for(IPNode *pTemp=pHead;pTemp;pTemp=pTemp->pNext)专业 .专注.long lTemp=pTemp->getIPAddress();out<<inet_ntoa(*(in_addr*)&(lTemp)&l
16、t;<'t'out<<pTemp->getCount()<<endl;return out;void main(int argc,char *argv)if (argc!=3)/ 判断是否正确cout<<"Usage:IPStatistic time logfile"<<endl;cout<<"Press any key to continue."<<endl;_getch();return;double min=atof(argv1);pcap_if_t
17、 *alldevs;/ 网络设备结构pcap_if_t *d,*head=NULL;pcap_t *fp;/ 网卡描述专业 .专注.char errbufPCAP_ERRBUF_SIZE;/ 错误信息unsigned int netmask;/ 子网掩码char packet_filter="ip"/ 过滤 ,选择 IP 协议struct bpf_program fcode;struct pcap_pkthdr *header;const unsigned char *pkt_data;/ 获取网络设备列表if(pcap_findalldevs(&alldevs,e
18、rrbuf) = -1)cout<<"Error in pcap_findalldevs:"<<errbuf;return;int i=1;/ 网卡数if(i=0)/ 无设备cout<<"nNo interfaces found! Make sure Winpacp is installed.n"return;if(i>=1)int j=0;for(d=alldevs;d;d=d->next) /列出网卡列表 ,让用户进行选择专业 .专注.cout<<+j<<":"
19、;<<d->name;if(d->description)cout<<" "<<d->description<<endl;cout<<"nEnter the interface number(1-"<<j<<"):"int k;cin>>k;if(k<1|k>j)cout<<"out of range"<<endl;return;for(d=alldevs,i=1;i
20、<k;d=d->next,i+);/ 找到选择的网卡head=d;/ 以混杂模式方式打开网卡if(fp=pcap_open_live(head->name,1000,1,1000,errbuf)=NULL)cout<<"nUnable to open the adapter."<<endl;pcap_freealldevs(alldevs);return;专业 .专注./ 获取子网掩码if(head->addresses!=NULL)netmask=(structelse/ 没有地址则假设为 C 类地址netmask=0xFF
21、FFFF00;/ 编译过滤器if(pcap_compile(fp,&fcode,packet_filter,1,netmask)<0)cout<<"nUnable to compile the packet filter.Check the syntax.n"pcap_freealldevs(alldevs);return;/ 设置滤波器if(pcap_setfilter(fp,&fcode)<0)cout<<"nError setting the filter.n"pcap_freealldevs(alldevs);return;专业 .专注./ 显示提示信息及每项的含义cout<<"ttlistening on"<<head->description<<"."<<endl<<endl;ofstream fout(argv2,ios:app);/ 日志记录文件fout<<"tIP Statistic:("<<min<<"minutes)"<<endl;time_t tmp=time(NULL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 买菜贷款合同标准文本
- 乡镇家具采购合同标准文本
- 使用兵不厌诈造句(2篇)
- 优化供应链管理的工作方案计划
- 兼职律师合同标准文本
- 农村产权赠予合同标准文本
- 佛山机械购销合同标准文本
- 主题式教学在幼儿园的探索实践计划
- 企业价值观的传播与践行计划
- 关于产品购销合同标准文本
- 冷库维护保养合同范本
- 工业互联网基础 课件 3.1 工业互联网平台概述
- 智慧酒店智能化系统解决方案
- 2025年合肥滨湖职业技术学院单招职业技能测试题库完美版
- 《中建三局工程管理实习报告》2000字
- 家庭牧场申请书
- 2025年辽宁医药职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 模块综合试卷-2024版化学高三总复习
- 福建省宁德市2024-2025学年九年级上学期期末考试道德与法治试题
- 第3课 珍惜水资源(说课稿)-2023-2024学年五年级下册科学教科版
- 2025年中储粮集团公司招聘笔试参考题库含答案解析
评论
0/150
提交评论