当前位置:
文档之家› 监控IP包流量050-62124(吴文强)
监控IP包流量050-62124(吴文强)
//当链表为空时
{pTail=new IPNode(sourceIP);
pHead=pTail;
pTail->pNext=NULL;
}
else
//当链表不为空时
{for(IPNode * pTemp=pHead;pTemp;pTemp=pTemp->pNext)
{//如果链表中存在此 IP,发送数据包个数加 1
//发送数据包数
public:
IPNode * pNext;
//构造函数
IPNode(long sourceIP)
{m_lIPAddress=sourceIP;
m_lCount=1;
//初始化数据包个数为 1
}
void addCount()
{m_lCount++;
4
}
//返回数据包个数
long getCount()
南昌航空大学计算机学院
课程设计说明书
课程名称: 设计题目:
计算机网络课程设计 监控 IP 包流量
专业: 姓名: 评分:
网络工程 吴文强
班级: 050621
学号:
24
指导教师: 周之平 邓林生
2008 年 6 月 29 日
1
一.课程设计目的
随着 Internet 技术的发展,基于 IP 协议的网络应用成为网络技术 研究与软件开发的一个重要基础,因此学习网络层的基本概念,了解 IP 协议的基本内容,对于掌握 TCP/IP 协议的主要内容和学习网络课程是十 分重要的。通过本课程设计,有助于熟悉 IP 包格式和加深对 IP 协议的 理解。
3
图 2 初始化界面
(2)向工程里添加 C++头文件,命名为 IPNodeList(存储结构接点和链表的定义),代
码如下:
//IP 结点类,存放 IP 包的源 IP 地址和其它发送数据包个数
class IPNode
{private:
long m_lIPAddress;
//IP 地址
long m_lCount;
二.需求分析 1.编制程序,监控网络,捕获一段时间内网络上 IP 数据包,按 IP
数据包的源地址统计出该源地址在该时间内发出的 IP 包个数,将其写入 日志文件中或用图形表示出来。
2.设 计 可 视 化 图 形 界 面 ,可 以 进 行 捕 获 操 作 和 停 止 操 作 ,并 且 捕 获 完成后有统计结果显示和日志文件生成。
if(pTemp->getIPAddress()==sourceIP)
{pTemp->addCount();
break;
}
5
} //如果链表中没有此 IP,则加入链表 if(pTemp==NULL) {pTail->pNext=new IPNode(sourceIP); pTail=pTail->pNext; pTail->pNext=NULL; } } } IPNode* GetpHead() {return pHead;} }; (3)本次设计需要用到 Winpcap 软件,必须设置 VC 的环境,首先下载 wpdpack,解压 后 看 到 其 中 包 含 docs,Includes,lib,Examples 等 文 件 , 然 后 打 开 VC, 点 击 “Tools->Option->Directories”, 在 include files 添加……\wpdpack\Include 目录; 在 Library files 中添加……\wpdpack\Lib 目录 (4)在 IPStatisticDlg.cpp 中添加下列头文件:
⑵ 主 要 是 查 找 网 卡 ,设 置 网 卡 为 混 杂 模 式 ,编 辑 过 滤 器 ,设 置 过 滤 器;
⑶ 捕 获 IP 数 据 包 并 按 包 的 源 地 址 进 行 统 计 ( 存 入 链 表 中 )。
程序流程图如下:
2
图 1 程序流程图
四.详细设计及编码
( 1) 新 建 一 个 基 于 对 话 框 的 MFC AppWizard[exe]工 程 , 取 名 为 IPStatistic。 在 IDD_IPSTATISTIC_DIALOG 中加入界面所需要的控件,所加的控件从上到下依次有静态文 本取名为网卡列表,下拉列表框(定义变量为 m_comboboxx),静态文本取名为捕获包个 数,静态文本(设置 ID 为 IDC_CLOCK,用于显示捕获的包个数),开始捕获按钮,停止 按钮,退出按钮,静态文本(设置 ID 为 IDC_STATE,用于表示当前状态),一个组合框(取 名为统计结果如下:), 一个清空列表按钮,最后一个是列表控制框(用于显示最后捕获 的数据统计),此时的界面如下图:
{return m_lCount;
}
//返回 IP 地址
long getIPAddress()
{return m_lIPAddress;
}
};
//结点链表
class NodeList
{IPNode * pHead; //链表头
IPNode * pTail; //链表尾
public:
NodeList()
{pHead=pTail=NULL;
}
~NodeList()
{if(pHead!=NULL)
{IPNode * pTemp=pHead;
pHead=pHead->pNext;
delete pTemp;
}
}
//将 IP 结点加入链表
void addNode(long sourceIP)
{if(pHead==NULL)
3. 程 序 设 计 采 用 C++或 者 Java( 本 次 设 计 决 定 采 用 C++)。
三.概要设计
本次课程设计的主要目的是接收统计 IP 包,所以主要任务就是设 置网卡以及相关的一系列操作,而图形界面的设计要求次之,所以主要 介绍下我门对接收统计 IP 包的一些设计:
⑴定义一些用于存储所要记录的源地址和该源地址发出的包的个 数的结构体以及链表;
#include "stdafx.h" #include "IPStatistic.h" #include "IPStatisticDlg.h" #include "IPNodeList.h" #include <iostream.h> #include <iomanip.h> #include <fstream.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include "pcap.h" #pragma comment(lib,"Wpcap.lib") #pragma comment(lib,"Ws2_32.lib") (5)定义一些程序中将要用的全局变量和 IP 包的头部结构,如下: //IP 包的头部结构 struct ip_header{