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

102_网络数据包分析工具(PHP+MYSQL+VC++)

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

系统控制模块实现
在第四章叙述了模块化设计的优点,但是如何划分模块仍然是一个重要的问题。如果模块划分的不合理,实现起来就十分的麻烦!本系统是按功能划分的,有四个模块:一是 数据包的捕获,二是 数据包的解析,三是 捕获信息的分析,四是 显示捕获数据包的信息。捕获模块实现用libpcap,数据包解析及存储用C和mysql,数据包信息分析用C语言,数据包信息显示用php。四个模块之间的调用关系如图4。

【www.think58.com计算机毕业论文网】 copyright think58

[资料来源:THINK58.com]

[版权所有:http://think58.com]

[资料来源:THINK58.com]

think58.com

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

think58.com

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

[版权所有:http://think58.com]


在模块之间衔接运用到了线程的操作,还有几个重要的全局变量。操作流程如图5。
线程操作的核心代码如下:
打开一个线程并执行程序。
//建立一个线程运行数据包捕获函数
void p_click(GtkWidget * widget,gpointer data)
{
pthread_mutex_lock(&mutex);
stop=1;//捕获条件
pthread_mutex_unlock(&mutex);
pthread_create(&p_thread,NULL,panalyzer,NULL);//建立线程
}
//设置stop,停止运行指定线程。
void pexit(GtkWidget * widget,gpointer data)
{
pthread_mutex_lock(&mutex);
stop=0;//捕获条件
pthread_mutex_unlock(&mutex);} [资料来源:http://THINK58.com]

copyright think58

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

[资料来源:http://THINK58.com]

think58

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

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

[版权所有:http://think58.com]

copyright think58

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

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

copyright think58

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

think58好,好think58

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

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

本文来自think58

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

[资料来源:http://THINK58.com]

[资料来源:http://THINK58.com]

5.2 数据包捕获模块实现
数据包捕获是有Libpcap开发包中的函数实现的,使用的函数有以下几个。
pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)
获得用于捕获网络数据包的数据包捕获描述字。device参数为指定打开 的网络设备名。snaplen参数定义捕获数据的最大字节数。promisc指定 是否将网络接口置于混杂模式。to_ms参数指定超时时间(毫秒)。 ebuf参数则仅在pcap_open_live()函数出错返回NULL时用于传递错误消息。
char *pcap_lookupdev(char *errbuf)
用于返回可被pcap_open_live()或pcap_lookupnet()函数调用的网络 设备名指针。如果函数出错,则返回NULL,同时errbuf中存放相关的 错误消息。
int pcap_lookupnet(char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf)
获得指定网络设备的网络号和掩码。netp参数和maskp参数都是 bpf_u_int32指针。如果函数出错,则返回-1,同时errbuf中存放相 关的错误消息。
int pcap_loop(pcap_t *p, int cnt,pcap_handler callback, u_char *user)
功能基本与pcap_dispatch()函数相同,只不过此函数在cnt个数据包 被处理或出现错误时才返回,但读取超时不会返回。而如果为pcap_open_live()函数指定了一个非零值的超时设置,然后调用 [资料来源:THINK58.com]
int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)
将str参数指定的字符串编译到过滤程序中。fp是一个bpf_program结构的指针,在pcap_compile()函数中被赋值。optimize参数控制结果代码的优化。netmask参数指定本地网络的网络掩码。[4]
捕获数据包核心代码:
void panalyzer()
{
………………
char *device=pcap_lookupdev(ebuf);//获取网卡
void catch_packet(u_char *args,const struct pcap_pkthdr *header,u_char *packet);
pcap_lookupnet(device,&localnet,&netmask,ebuf);//读取网络信息
………………
pcap_t *pd=pcap_open_live(device,BUFSIZ,0,1000,ebuf);//打开网络设备
starttime();
while(stop==1)
{
pcap_loop(pd,packet_number,catch_packet,NULL);//捕获数据包
}
endtime();
struct pcap_stat stat;
pcap_stats(pd,&stat);//统计捕获数据包
………………
pcap_close(pd); [资料来源:www.THINK58.com]
return;}
函数调用关系如图6。 copyright think58

[版权所有:http://think58.com]

[版权所有:http://think58.com]

本文来自think58

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

think58好,好think58

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

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

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

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

5.3 数据包解析及存储模块实现
解析与数据存储模块使用C 语言完成数据包的解析和数据库的连接。可解析的协议报头有:Ethernet包头,LLC,ARP/RARP,IP,TCP,UDP,DHCP,DNS,ICMP的包头格式。同时存储模块连接mysql 数据库,把解析得到的数据放入到数据库当中。数据库设计到表的建立问题。
整个报头解析的基本过程如图7。

think58

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

[资料来源:THINK58.com]

think58.com

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

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

本文来自think58

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

[资料来源:http://THINK58.com]

think58.com

[版权所有:http://think58.com]

本文来自think58 [版权所有:http://think58.com]

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

DHCP包头数据结构的定义:
typedef struct _DHCPHdr
{
#if defined(WORD_BIGENDIAN)
U_int8_t hops;
U_int8_t hlen;
u_int8_t htype;
u_int8_t op;

#else
U_int8_t op;
u_int8_t htype;
u_int8_t hlen;
u_int8_t hops;
#endif
u_int32_t xid;
u_int16_t secs;
u_int16_t flags;
u_int32_t ciaddr;
u_int32_t yiaddr;
u_int32_t siaddr;
u_int32_t giaddr;
unsigned char chaddr[16];
char sname[64];
char file[128];
}DHCPHdr; think58 [来源:http://www.think58.com]

连接mysql数据库的关键语句:
………………
MYSQL mysql;
char str[1024];
mysql_init(&mysql);//初始化数据库
if(!(mysql_real_connect(&mysql,"localhost","root","159753","packet",0,NULL,0))) //连接数据库
printf("ERROR!\n");
………………
if(mysql_query(&mysql,str)) printf("Dhcp insert error!\n");
//执行插入语句
mysql_close(&mysql);
//关闭数据库
………………
5.4 数据包信息分析模块实现
数据包信息分析模块主要是对数据包信息进行数据的统计和分析,并且针对常见的入侵方式做特征的对比。涉及到的特征有:Land 攻击,TCP SYN攻击,Ping Of Death攻击,WinNuke攻击,TCP/UDP端口扫描,synscan端口扫描等。函数调用流程如图8。

copyright think58 [资料来源:http://THINK58.com]

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

本文来自think58

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

think58

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

内容来自think58

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

[资料来源:http://THINK58.com]

think58好,好think58 [版权所有:http://think58.com]

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

think58.com

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

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

本文来自think58 [资料来源:http://think58.com]

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

本文来自think58 [资料来源:www.THINK58.com]

本文来自think58

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


核心数据查询及对比特征代码:
………………
/*以下代码是连接数据库和进行特征比较的代码,比较的特征是synscan的扫描特征*/
res = mysql_query(&mysql,"select sourceip from ip where ");//生成mysql语句
if(!(result = mysql_store_result(&mysql)))//返回查询结果
{
printf("error!\n");
}
Else
{
numRecords=mysql_num_rows(result);
for(count=0;count<numRecords;count++)//提取查询数据
{
row=mysql_fetch_row(result);
if(atoi(row[0])==39426&&atoi(row[1])==1028)//设定特征条件
{
n++;
}
}
fputs("<br>",fp);
if(n>0)
//输出分析结果描述
fprintf(fp,"主机收到synscan数据包,可能受到synscan端口扫描!\n");
else
fprintf(fp,"主机收到数据包未发现synscan端口扫描!\n");
………………

内容来自think58

[资料来源:THINK58.com]

[资料来源:http://THINK58.com]