监控IP包流量课程设计任务书.docx

上传人:b****2 文档编号:2035462 上传时间:2022-10-26 格式:DOCX 页数:14 大小:145.21KB
下载 相关 举报
监控IP包流量课程设计任务书.docx_第1页
第1页 / 共14页
监控IP包流量课程设计任务书.docx_第2页
第2页 / 共14页
监控IP包流量课程设计任务书.docx_第3页
第3页 / 共14页
监控IP包流量课程设计任务书.docx_第4页
第4页 / 共14页
监控IP包流量课程设计任务书.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

监控IP包流量课程设计任务书.docx

《监控IP包流量课程设计任务书.docx》由会员分享,可在线阅读,更多相关《监控IP包流量课程设计任务书.docx(14页珍藏版)》请在冰豆网上搜索。

监控IP包流量课程设计任务书.docx

监控IP包流量课程设计任务书

学院

信息科学与工程学院

专业

计算机科学与技术

姓名

XXX

学号

题目

监控IP包流量

内容及要求:

编制程序,监控网络,捕获一段时间内网络上的IP数据包,按IP数据包的源地址统计出该源地址在该时间段内发出的IP包的个数,将其写入日志文件或用图形表示出来(建议用图形表示统计结果)。

程序的具体要求如下:

用命令行运行:

IPstatistictimelogfile

其中,IPstatistics是程序名,time是设定的时间间隔(单位为分钟,比如,2表示2分钟);logfile表示统计结果写入的日志文件名(若用图形表示统计结果则可以不选这个参数)

WindowsXp,CodeBlocks10.05

进度安排:

第16周

星期一:

设计任务分析和总体设计

星期二:

软件算法和流程设计

星期三,四,五:

软件编码实现

第17周

周一:

软件总体调试

周二:

软件运行分析

周三:

答辩,验收程序

周四:

答辩,验收程序

周五:

书写课程设计报告,提交

指导教师(签字):

 

年月日

学院院长(签字):

 

年月日

课程设计任务书

目录

1题目内容及设计要求1

2总体设计1

2.1总体功能框图1

2.2类的设计说明1

2.3主要算法流程图3

3程序清单及注释3

4运行结果与分析10

5总结12

6参考文献12

1题目内容及设计要求

题目8监控IP包流量

编制程序,监控网络,捕获一段时间内网络上的IP数据包,按IP数据包的源地址统计出该源地址在该时间段内发出的IP包的个数,将其写入日志文件或用图形表示出来(建议用图形表示统计结果)。

程序的具体要求如下:

用命令行运行:

IPstatistictimelogfile

其中,IPstatistics是程序名,time是设定的时间间隔(单位为分钟,比如,2表示2分钟);logfile表示统计结果写入的日志文件名(若用图形表示统计结果则可以不选这个参数)。

2总体设计

2.1总体功能

1.课程设计中的重点及难点

1)程序中会用到Winpcap,Wiinpcap的介绍请参阅附录B.

2)列出网卡列表,让用户进行选择可用的网卡。

3)注意过滤器的使用,只需捕获IP包,别的包都过滤掉。

2.参考算法

1)取得当前网络设备列表(在标准输出上显示,以让用户进行选择)。

2)将用户选择的Ethernet卡以混杂模式打开,以接收到所有的数据包。

3)设置过滤器,此处的过滤器“IP”。

3)捕获IP包并按包的源地址进行统计(用链表结构进行实现)。

2.2类的设计说明

IP包头部结构:

Structip_header

{

unsignedcharver_ihl;//版本号(4位)+头部长度(4位)

unsignedchartos;//服务类型

unsignedshorttlen;//总长度

unsignedshortflag_fo;//标志+片偏移

unsignedcharttl;//生存时间

unsignedcharproto;//协议

unsignedshortcrc;//校验和

DOWORDsaddr;//源地址

DOWORDdaddr;//目的地址

unsignedcharintop_pad;//选项+填充

};

1)选择网卡。

//选择一个Enthernet卡

for(d=alldevs;d;d=d->name)

{If(d->addresses!

=NULL)

{i++;if(head==NULL)head=d;}

}

2)给出网卡列表,让用户选择。

for(d=alldevs;d;d=d->next)//列出网卡列表,让用户进行选择

{cout<<++j<<”:

”<name;

if(d->description)cout<<””<description<

}

3)以混杂模式打开网卡。

if((fp=pcap_open_live(head->name,1000,1,1000,erbuff))==NULL)

{cout<<”\nUnabletoopentheadapter.”<

pcap_freealldevs(alldevs);return;

}

4)编译过滤器并设置过滤器。

if(pcap_compile(fp,&fcode,packet_filter,1,netmask)<0)

{cout<<”\nUnabletocompilethepacketfilter.Checkthesyntax.\n”<

pcap_freealldevs(alldevs);return;

}

5)在给定的时间内循环捕获IP数据包,并将该包的源地址加入链表。

while((res=pcap_next_ex(fp,&fcode))>=0)

{time(&end);//获取系统时间

if(end->beg>=min*60)//计算统计时间

if(res==0)continue;//超时

ip_header*ih;//找到IP头的位置

ih=(ip_header*)(pkt_data+14);//14为Enthernet头的长度

link.addNode(ih->saddr);//将源IP地址加入链表

}

6)输出链表的内容。

2.3主要算法流程图

主要算法流程图如图2-4所示。

图2-4程序流程图

3程序清单及注释

#ifndefIPNODELIST_H_INCLUDED

#defineIPNODELIST_H_INCLUDED

#endif//IPNODELIST_H_INCLUDED

//

(1)程序中使用的链表(以头文件IPNodeList.h的形式给出):

//IP结点类,存放IP包的源IP地址和其发送的数据包个数

classIPNode

{

private:

longm_lIPAddress;//IP地址

longm_lCount;//发送数据包数

public:

IPNode*pNext;//指向下一个IP结点

IPNode(longsourceIP)//构造函数

{

m_lIPAddress=sourceIP;

m_lCount=1;//初始化数据包个数为1

}//数据包个数加1

voidaddCount()

{

m_lCount++;

}//返回数据包个数

longgetCount()

{

returnm_lCount;

}

//返回IP地址

longgetIPAddress()

{

returnm_lIPAddress;

}

};

//结点链表

classNodeList

{

IPNode*pHead;//链表头

IPNode*pTail;//链表尾

public:

NodeList()

{

pHead=pTail=NULL;

}

~NodeList()

{

if(pHead!

=NULL)

{

IPNode*pTemp=pHead;

pHead=pHead->pNext;

deletepTemp;

}

}

//IP结点加入链表

voidaddNode(longsourceIP)

{

if(pHead==NULL)//当链表为空时

{

pTail=newIPNode(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(pTemp==NULL)

{

pTail->pNext=newIPNode(sourceIP);

pTail=pTail->pNext;

pTail->pNext=NULL;

}

}

}

//输出IP结点,即IP地址和其发送的IP包个数

ostream&print(ostream&out)

{

for(IPNode*pTemp=pHead;pTemp;pTemp=pTemp->pNext)

{

longlTemp=pTemp->getIPAddress();

out<

out<getCount()<

}

returnout;

}

};

//主程序如下:

#include

#include

#include

#include

#include

#include

#include"pcap.h"

#include"IPNodeList.h"

#pragmacomment(lib,"Wpcap.lib")

#pragmacomment(lib,"Ws2_32.lib")

//IP包的头部结构

structip_header

{

unsignedcharver_ihl;//版本号(4位)+头部长度(4位)

unsignedchartos;//服务类型

unsignedshorttlen;//总长度

unsignedshortidentification;//标识

unsignedshortflags_fo;//标志+片偏移

unsignedcharttl;//生存时间

unsignedcharproto;//协议

unsignedshortcrc;//校验和

DWORDsaddr;//源地址

DWORDdaddr;//目的地址

unsignedintop_pad;//选项+填充

};

voidmain(intargc,char*argv[])

{

if(argc!

=3)//判断参数是否正确

{

cout<<"Usage:

IPStatistictimelogfile"<

cout<<"Pressanykeytocontinue..."<

_getch();

return;

}

doublemin=atof(argv[1]);

pcap_if_t*alldevs;//网络设备结构

pcap_if_t*d,*head=NULL;

pcap_t*fp;//网卡描述

charerrbuf[PCAP_ERRBUF_SIZE];//错误信息

unsignedintnetmask;//子网掩码

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1