优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

015_局域网抓包软件

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

4 局域网信息捕获器的设计
4.1 功能概述
通过前面的叙述可以知道,这款软件具有的功能,那就是:能够分别捕获局域网中的TCP协议类型数据,UDP协议类型数据和从某一特定的IP地址发送出来的TCP协议类型数据和UDP协议数据类型。并且,将这些捕获出来的数据包的基本信息存入到数据库中,提供给网络管理员使用和进一步的分析。
系统流程图如下图:

图10 系统流程图
本系统包括三个基本模块,分别是数据包捕获模块,数据分析模块和数据库模块。其中数据包捕获模块的功能是:利用Winpcap控件,通过网卡设备从网络中捕获数据包;数据分析模块的功能是:主要实现数据的解析,从网络适配器中捕获到的数据的为原始数据(raw data),这些原始数据为二进制格式,必须转化为能比较好明白的格式,这就要求将这些原始数据能按照网络数据传输的具体格式来保存,主要为了能较好的读懂相关的信息,以便使用者分析;数据库模块的功能是:经过前两个模块处理后的数据,现在已经转化成了对我们有用的信息了,而这些信息不可能一直让他存放在内存中,那么就需要在数据库中建立相应的表,把这些信息存贮在这些数据库表的相应列名中,以便使用者处理、使用。

【www.think58.com计算机毕业论文网】 [资料来源:http://www.THINK58.com]


4.2 系统功能模块的设计
4.2.1 数据包捕获模块
数据包捕获模块主要用Winpcap软件实现,模块的设计思想遵循Winpcap捕获数据包的流程,流程分三步:查找设备,打开设备和捕获数据的函数。利用WinPcap结构提供的wpcap.dll来开发实现数据包捕获程序。流程图如下:

图11 数据捕获模块流程图
这里给出其主要过程:
先确定要在其上进行监测的网络适配器,得到现有的网络适配器的列表和他们的描述,从而获得该NIC的相关信息。
if( pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf) == -1)
{
MessageBox("查找设备出错","提示");
return;
}
接下来打开所获得的网络适配器,其中pcap_open函数的参数1为上面获得的NIC名称,参数2定义了网络监测程序所捕捉的最大字节数。参数3指示是否将网络适配器设为混杂模式,PCAP_OPENFLAG_PROMISCUOUS表示工作方式为混杂模式。参数4为捕获时间限制,单位为毫秒。参数5为错误信息缓存。该函数负责按照用户指定参数和其它系统默认值初始化WinPcap,并返回会话句柄
//打开设备
adhandle = pcap_open(d->name,
65536,
PCAP_OPENFLAG_PROMISCUOUS,
[资料来源:http://think58.com]

1000,
NULL,
errbuf);
当网卡已打“打开”并且具体配置好后,就可以进入捕获了。考虑到系统资料的占用等问题,利用了线程来解决此问题,捕获数据是新建一个线程,来实现数据的捕获,再在线程中处理数据的解析和特征码的提取,其中CreateThread函数的参数1为指向SECURITY_ATTRIBUTES结构体的指针,参数2指定线程堆栈大小,参数3指定线程执行函数名称,参数4表示给新线程的参数,参数5为线程指定的更多控制参数,参数6为新线ID。代码如下
//这里创建一个线程来处理数据
LPDWORD ThID=NULL;
m_handle=CreateThread(NULL,0,ThreadProc,this,0,ThID);
if(m_handle==NULL)
{
return ;
}
//线程处理函数
DWORD WINAPI ThreadProc( LPVOID lpParameter )
{
CLjDlg * m_dlg = (CLjDlg *)lpParameter;
struct pcap_pkthdr *header; //捕获数据包的头
const u_char *pkt_data; //指向常量的指针
int res; //pcap_next_ex的返回值
m_dlg->SetDlgItemText(IDC_STATIC_TIP,"线程开始捕获数据.");
while((res=pcap_next_ex(m_dlg->adhandle,&header,&pkt_data))>=0) 内容来自think58
[资料来源:http://www.THINK58.com]

{
if(res==0)//超时
continue;
//处理捕获的数据包
m_dlg->SaveDate(header,pkt_data);
}
return 1;
} copyright think58 [来源:http://www.think58.com]

4.2.2 数据分析模块实现
数据分析模块的设计思想是将Winpcap捕获到的数据对应网络数据包的格式进行初始化,取得具体的值。通过相关的转换函数得到相关的信息,具体的函数原型如下:(相关格式见第二章)
void SaveDate(struct pcap_pkthdr * header , const u_char * pkt_data);
将网络中捕获的数据包进行格式化
数据分析模块的主要实现数据的解析。从网络适配器中捕获数据的为原始数据(raw data),这些原始数据为二进制格式,必须转化为能比较好明白的格式,这就要求将这些原始数据能按照网络数据传输的具体格式来保存,主要为了能较好的读懂相关的信息,以便使用者分析。
其流程图如下:

图12数据包分析流程图
数据分析模块实现时,本系统提取的数据包中主要的一些信息,如IP数据包中的IP地址,端口信息等。具体代码下:
//数据包分析和保存
ipheader * ih;
tcp* tcph;
udp* udph;
CString temp;
int chang;
//时间
struct tm *ltime;
ltime=localtime(&header->ts.tv_sec);
strftime(timestr,sizeof(timestr),"%H:%M:%S",ltime);
//IP
ih=(ipheader*)(pkt_data+14);//ip头 内容来自think58 [来源:http://www.think58.com]
int iplen=(ih->ver_ihl & 0xf)*4;
itoa(iplen,IPLength,10);
sprintf(IPDateLength,"%d",header->len);//IP数据包长度
sprintf(TTL,"%d",ih->ttl);//生存时间
sprintf(SIP,"%d.%d.%d.%d",ih->saddr.byte1,ih->saddr.byte2,ih->saddr.byte3,ih->saddr.byte4);
sprintf(DIP,"%d.%d.%d.%d",ih->daddr.byte1,ih->daddr.byte2,ih->daddr.byte3,ih->daddr.byte4);
u_short u_sport,u_dport;
if(ih->proto == 6 ) //这里是TCP数据包
{
strcpy(proto,"TCP"); //协议类型
tcph=(tcp*)((u_char*)ih + iplen);
u_sport = ntohs(tcph->sport); //源端口
u_dport = ntohs(tcph->dport); //目的端口
// sprintf(Sport,"%d",tcph->sport); //源端口
// sprintf(Dport,"%d",tcph->dport); //目的端口
chang = (tcph->other ^ 0x0fff) / 1024;
sprintf(tcp_hLength,"%d",chang); //TCP首部长度
sprintf(date,"%X",tcph->content); //TCP数据
}

内容来自think58

[来源:http://think58.com]


else if(ih->proto == 17) //这里是UDP数据包
{
strcpy(proto,"UDP");
udph=(udp*)((u_char*)ih + iplen);
u_sport = ntohs(udph->sport); //源端口
u_dport = ntohs(udph->dport); //目的端口
// sprintf(Sport,"%d",udph->sport); //源端口
// sprintf(Dport,"%d",udph->dport); //目的端口
sprintf(udplength,"%d",udph->len); //TCP首部长度
sprintf(date,"%X",udph->content); //TCP数据
}
sprintf(Sport,"%d",u_sport); //源端口
sprintf(Dport,"%d",u_dport); //目的端口
AccessWrite(ih->proto);
} copyright think58

[资料来源:www.THINK58.com]

本文来自think58

[来源:http://think58.com]