欢迎来到天天文库
浏览记录
ID:11336380
大小:487.50 KB
页数:14页
时间:2018-07-11
《基于lpcap的网络数据捕获系统设计与实现实验报告大学论文.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、研究生实验报告实验名称:基于lpcap的网络数据捕获系统设计与实现课程名称:信息系统及其安全对抗任课教师:学生姓名:学生学号:学生学院:学生学科:目录1引言32系统设计与实现33系统特色分析64系统自测试75参考文献86附件8引言现如今,随着Linux操作系统的推广,Linux下的相关监控、维护需求也逐渐增多,本捕获器正是利用了这一优势。数据包捕获开发包Libpcap(ThePacketCaptureLibrary)是一个平台独立的网络数据包捕获开发包。它是一个高层的编程接口,隐藏了操作系统的细节,可以捕获网络上的所有数据包,包括到达其他主机的数据包。Libpcap中使用了BPF过
2、滤机制,这部分是基于内核的过滤模块,它使得Libpcap具有捕获特定数据包的功能。1系统设计与实现1.1Libpcap工作原理Libpcap主要由两部份组成:网络分接头(NetworkTap)和数据过滤器(PacketFilter)。网络分接头从网络设备驱动程序中收集数据拷贝,过滤器决定是否接收该数据包。Libpcap利用BSDPacketFilter(BPF)算法对网卡接收到的链路层数据包进行过滤。BPF算法的基本思想是在有BPF监听的网络中,网卡驱动将接收到的数据包复制一份交给BPF过滤器,过滤器根据用户定义的规则决定是否接收此数据包以及需要拷贝该数据包的那些内容,然后将过滤后
3、的数据给与过滤器相关联的上层应用程序。BPF的架构如图所示。图2-1BPF架构Libpcap的包捕获机制就是在数据链路层加一个旁路处理。当一个数据包到达网络接口时,Libpcap首先利用已经创建的Socket从链路层驱动程序中获得该数据包的拷贝,再通过Tap函数将数据包发给BPF过滤器。BPF过滤器根据用户已经定义好的过滤规则对数据包进行逐一匹配,匹配成功则放入内核缓冲区,并传递给用户缓冲区,匹配失败则直接丢弃。如果没有设置过滤规则,所有数据包都将放入内核缓冲区,并传递给用户层缓冲区。1.1Libpcap函数库1、pcap_lookupdev()函数用于查找网络设备,返回可被pca
4、p_open_live()函数调用的网络设备名指针。2、pcap_open_live()函数用于打开网络设备,并且返回用于捕获网络数据包的数据包捕获描述字。3、pcap_lookupnet()函数获得指定网络设备的网络号和掩码。4、pcap_compile()函数用于将用户制定的过滤策略编译到过滤程序中。5、pcap_setfilter()函数用于设置过滤器。6、pcap_loop()函数pcap_dispatch()函数用于捕获数据包,捕获后还可以进行处理。7、pcap_next()函数pcap_next_ex()函数也可以用来捕获数据包。8、pcap_close()函数用于关闭
5、网络设备,释放资源。1.1Libpcap功能结构图2-2Libpcap功能结构图2.3.1数据包捕获通过调用Libpcap的库函数实现数据包的捕获,程序流程图如图所示:图2-3数据包获取流程图2.3.2数据包解析当计算机将数据从TCP/IP协议族的一层传到另一层时,会加入相应的头和控制信息。从上层传到下层的任何信息对下层来说都将被视为普通的数据。对应用程序数据在网络上传输的过程中,是通过协议栈发到网络上的,每层协议都要加上一个数据收不,称为封装,不同的协议层对数据包有不同的称谓,在传输层叫做段,在网络层叫做数据报,在链路层叫做帧。数据封装成帧后发到传输介质上,到达目的主机后每层协议
6、再去掉相应的首部,最后将应用层数据交给应用程序处理。此处,就是按照解封装的过程获得数据包各字段的内容和信息。2.3.3数据包存库及显示使用MySQL提供的C语言的API,主要用到的有以下几个。1、MYSQL*mysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedintclient_flag);该函数用于与MySQL数据库引擎建立连接。在执行进一步的数据操作之前,必须
7、保证mysql_real_connect()成功返回。参数mysql是指向MySQL数据结构的指针;host是运行MySQL数据库引擎的机器的TCP/IP主机名;user和password是MySQL数据库的合法用户和口令;db是连接的数据库名;port,unix_socket和client_flag一般取默认值。2、intmysql_query(MYSQL*mysql,constchar*query);该函数用于执行query字符串中的SQL语句,query必须以
此文档下载收益归作者所有