精品资料(2021-2022年收藏)计算机网络课程设计监控IP数据包流量.doc
《精品资料(2021-2022年收藏)计算机网络课程设计监控IP数据包流量.doc》由会员分享,可在线阅读,更多相关《精品资料(2021-2022年收藏)计算机网络课程设计监控IP数据包流量.doc(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、四 川 理 工 学 院课 程 设 计 书 学院 计算机学院 专业 计算机科学与技术 班级 题目 监控IP数据包流量 教师 学生 课程设计小组成员及分工本小组成员: xxx yyy zzz分工:xxx 做本课程设计的目的,本课程设计的要求及本课程设计的一些内容yyy 做本课程设计的一些基础知识,本课程设计的分析,本课程设计的结果,本课程设计的总结 zzz 做本课程设计的代码,本课程设计的框架设计,本课程设计的结果验证,本课程设计的逻辑分析。目 录一、 课程设计目的和要求1 1.课程设计目的:1 2.课程设计要求:1二、 课程设计的内容1三、 课程设计核心知识3四、 课程设计框架5五、 课程设计详
2、细分析7六、 实验源代码14七、 课程设计总结30一、 课程设计目的和要求1.课程设计目的: 随着internet技术的发展,基于IP协议的网络应用成为网络技术研究与软件开发的一个重要基础,因此学习网络层的基本概念,了解IP协议的基本内容,对于掌握TCP/IP协议的主要内容和学习网络课程是十分重要的。通过本次课程设计,有助于熟悉IP包格式和加深对IP协议的理解。2.课程设计要求:编制程序,监控网络,捕获一段时间内网络上的IP数据包,按IP数据包的源地址统计出在该时间段内发出的IP包的个数,将其写入日志文件中并用图形表示出来。 程序的具体要求如下:1.在图形窗口界面下,根据用户输入的捕获时间和选
3、择的网卡输出该段时间内的IP数据包流量分析2.能够将捕获的信息写入日志文件1二、 课程设计的内容1.课程设计的内容: 1)使用Winpcap,Winpcap的主要功能在于独立于主机协议(如TCP/IP)发送和接受原始数据包;2)列出网卡列表,让用户选择可用的网卡;3)使用过滤器捕获IP包,别的包都过滤掉;4)捕获IP包并按包的源地址进行统计(用链表结构进行实现)。5)将统计结果输出到图形窗口界面或输出到日志文件程序流程如图8-1所示。2. 一些必要的基础知识1. 熟悉IP首部格式2. 使用Winpcap工具WinPcap是一个基于Win32平台的,用于捕获网络数据包并进行分析的开源库.WinP
4、cap产生的目的,就是为Win32应用程序提供这种访问方式; WinPcap提供了以下功能a) 捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的b) 在数据包发送给某应用程序前,根据用户指定的规则过滤数据包c) 将原始数据包通过网络发送出去d) 收集并统计网络流量信息使用Winpcap工具主要需要三个步骤: 1).安装底层驱动:在Winpcap官网(www.winpcap.org)下载并安装Winpcap.exe即可2).导入库文件:下载wpdpack开发包,并在开发环境(VC)中导入Lib和Include 文件夹路径。VC导入步骤(工具-选项-目录,分别在Inc
5、lude Files和Library Files中加入/wpdpack/Include和/wpdpack/Lib) 3).在应用程序中导入需要的DLL和头文件:方法一:VC下:工程-设置-链接 在Object/Library modules下添加ws2_32.lib wpcap.lib(注意中间的空格)方法二:在源文件中添加命令处理:#pragma comment(lib, “ws2_32.lib”)#pragma comment(lib, “wpcap.lib”)本程序将会用到的Winpcap功能有:获取本机所有适配器信息 pcap_findalldevs以混杂模式打开适配器pcap_ope
6、n_live编译并设置过滤器pcap_compile pcap_setfilter捕获数据包 pcap_next_ex释放打开的适配器信息pcap_freealldevs3. VC+图形窗口界面编程包括按钮,编辑框,列表框,列表控件等控件的使用4. 其他相关知识,如文件操作,链表操作等三、 课程设计核心知识1.获取本机网卡信息本课程设计要实现对数据包的捕获,首先就要获取并列出本机上的所有网卡信息,这个功能是通过Winpcap提供的pcap_findalldevs来实现的。该函数原型如下int pcap_findalldevs(pcap_if_t* alldevs, char* errbuf)p
7、cap_if_t是一个用于描述网卡信息的结构体。里面包含了网卡的名字,描述等信息。通过这个函数可以得到一个网卡信息组成的链表。函数错误则返回-1。2.打开用户选定的网卡得到网卡信息之后,可以通过列表框等形式显示出来,在用户选择后,通过pcap_open_live打开指定网卡:pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)函数功能:获得用于捕获网络数据包的数据包捕获描述字。参数说明:device参数为指定打开的网络设备名。snaplen参数定义捕获数据的最大字节数。prom
8、isc指定是否将网络接口置于混杂模式。to_ms参数指*定超时时间(毫秒)。ebuf参数则仅在pcap_open_live()函数出错返回NULL时用于传递错误消息。这些参数中最重要的就是promisc参数,通过它可以将网卡监听设置为混杂模式,混杂模式是指不管网卡接收到的数据包是不是发给自己的,都向应用程序上传。这样可以捕获一些广播信息。本程序将监听模式设为混杂模式。3.编译并设置过滤器在打开网卡并得到网卡描述符后,可以编译并设置过滤器。 编译过滤器:int pcap_compile(pcap_t*p,struct bpf_program*fp,char*str,intoptimize, bp
9、f_u_int32netmask)编译一个数据包过滤器,将一个能被核心态(kernel-level)过滤器引擎解释的程序中的高层过滤表达式(filtering expression)进行转化。pcap_compile()被用来将字符串str编译进过滤器程序(fp),程序(fp)是一个指向bpf_program结构体并被pcap_compile()赋值的指针。optimize控制是否对目标代码(resulting code)的性能进行优化。Netmask表明IPv4掩码,它仅在检查过滤器程序中的IPv4广播地址的时候被使用。返回1表示发生了错误,此时,pcap_geterr()将被用来显示错误信
10、息。设置过滤器int pcap_setfilter(pcap_t*p,struct bpf_program* fp)把一个过滤器同一次抓包关联起来。pcap_setfilter被用来指定一个过滤器程序。fp是一个指向bpf_program结构体的指针,通常是pcap_compile()执行的结果。当失败时返回1,此时,pcap_geterr()被用来显示错误信息;返回0表示成功。4.抓包:接下来就是最后一步抓包,Winpcap提供的抓包接口主要有pcap_next_ex和pcap_loop两种pcap_loop直接由数据包捕获驱动所调用,它在底层抓取到包时,直接调用用户传入的处理函数本程序使用
11、另一个函数pcap_next_ex:pcap_next_ex(pcap_t* p,struct pcap_pkthdr* pkt_header,const u_char* pkt_data)功能: 从interface或离线记录文件获取一个报文参数: p: 已打开的捕捉实例的描述符 pkt_header: 报文头 pkt_data: 报文内容返回值: 1: 成功 0: 获取报文超时-1: 发生错误 -2: 获取到离线记录文件的最后一个报文31四、 课程设计框架1. 核心流程图:本程序是VC下基于对话框的窗口程序。界面如下:图1主要设计流程如下1. 在OnInitialDialog中获取并显示网
12、卡信息2. 在用户点击开始监听按钮时:a) 验证用户有效输入(验证用户是否输入有效的监控时间,是否选择合适的过滤器,以及是否已选择网卡)b) 以混杂模式打开网卡c) 根据用户在列表框中的选择编译并设置过滤器d) 开始抓取报文,将结果添加到统计链表。并随时检测是否超时。e) 抓取完成之后,将结果输出到列表控件界面f) 在用户关闭窗口或者开始再次监控时提示是否将结果输入日志文件(在用户再次选择监控时,需要清空已有数据)g) 用户关闭窗口时,提示保存日志并释放打开的所有适配器信息五、 课程设计详细分析一、 相关数据结构:1. IP首部结构体IP_HEADERtypedef struct ip_hea
13、derunsigned char ver_ihl; /版本号以及首部长度unsigned char tos; /区分服务unsigned short totallen; /总长度unsigned short id; /表示unsigned short flags_fragoffset; /标志和片偏移unsigned char ttl; /生存时间unsigned char proto; /协议类型unsigned short crc; /CRC校验DWORD srcaddr;/源IP地址DWORD dstaddr;/目的IP地址unsigned int op_pad;/填充字段IP_HEAD
14、ER;2. 统计的数据包信息结点CIPNode: 该类对象记录一个类型的数据包并且负责管理其包的数量 class CIPNode public:unsigned char GetProtocol();void AddCount();/增加本节点计数long GetCount();/获取本节点计数long GetIPAddress();/得到本节点IP地址CIPNode(long sourceIP, unsigned char proto);virtual CIPNode();CIPNode* pNext;private:long m_lIPAdress;/源IP地址long m_lcount;
15、/节点计数unsigned char m_proto;/协议类型;3. 统计信息链表类CstatisticsList 该类维护抓取到的数据包链表class CStatisticsList public:void Init();/初始化头尾指针为空CIPNode* GetHead();/得到头指针void AddNode(long ip, unsigned char proto);/添加一个结点 如/果该结点存在 则增加其计数 如果不存在创建并添加该节点CStatisticsList();/创建一个头尾指针均为空的链表virtual CStatisticsList();/释放自身维护的链表pri
16、vate:CIPNode* m_pHead;/头指针CIPNode* m_pTail;/尾指针;void CStatisticsList:AddNode(long ip, unsigned char proto)if (m_pHead = NULL)/如果当前链表为空 创建一个节点 初始化头尾指针m_pHead = m_pTail = new CIPNode(ip, proto);m_pTail-pNext = NULL;else/如果链表不为空 BOOL bFind = FALSE;CIPNode* p = NULL;/遍历链表 查找传入的ipfor (p=m_pHead; p; p=p-p
17、Next)/如果该ip已经存在 则增加其计数if (p-GetIPAddress() = ip & proto = p-GetProtocol()bFind = TRUE;p-AddCount();break;/如果不存在该ip 则添加节点 更新尾指针if (bFind = FALSE)m_pTail-pNext = new CIPNode(ip, proto);m_pTail = m_pTail-pNext;m_pTail-pNext = NULL;CStatisticsList:CStatisticsList()CIPNode* pTemp;/遍历链表 依次释放节点if (m_pHead)
18、pTemp = m_pHead;m_pHead = m_pHead-pNext;delete pTemp;m_pHead = NULL;m_pTail = NULL;二、 主界面类CIPPackCap逻辑:1. 主要类成员:class CIPPackCapDlg : public CDialogpublic:void ResetData();/在用户重新开始监控时 重新初始化数据void SaveToFile();/将最近一次统计结果保存到指定文件void AskSaveToFile();/询问用户是否保存文件void EnableSomeWindow(BOOL bEnable);/在监控过程
19、中 使输入控件无效void UpdateOutput();/更新统计列表输出BOOL StartListenning();/开始抓取数据包void InitStatisticsListCtrl();/初始化统计列表控件设置void SetTipsInfo(LPCTSTR pszformat, .);/格式化并显示提示消息BOOL SetListenFilter();/设置监控过滤器BOOL OpenSelDev();/打开用户选定的适配器BOOL FindAndShowAllDevs();/查找并显示所有的适配器private:BOOL m_bHadListend;/标志用户是否是第一次监控t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 资料 2021 2022 收藏 计算机网络 课程设计 监控 IP 数据包 流量
限制150内