ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:340.86KB ,
资源ID:28871698      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28871698.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于lpcap的网络数据捕获系统设计与实现实验报告大学论文.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于lpcap的网络数据捕获系统设计与实现实验报告大学论文.docx

1、基于lpcap的网络数据捕获系统设计与实现实验报告大学论文 研究生实验报告实验名称:基于lpcap的网络数据捕获系统设计与实现课程名称:信息系统及其安全对抗任课教师:学生姓名:学生学号:学生学院:学生学科:目 录1 引言 32 系统设计与实现 33 系统特色分析 64 系统自测试 75 参考文献 86 附件 81 引言现如今,随着 Linux 操作系统的推广,Linux 下的相关监控、维护需求也逐渐增多,本捕获器正是利用了这一优势。数据包捕获开发包Libpcap(The Packet Capture Library)是一个平台独立的网络数据包捕获开发包。它是一个高层的编程接口,隐藏了操作系统的

2、细节,可以捕获网络上的所有数据包,包括到达其他主机的数据包。Libpcap中使用了BPF过滤机制,这部分是基于内核的过滤模块,它使得Libpcap 具有捕获特定数据包的功能。2 系统设计与实现2.1 Libpcap 工作原理Libpcap主要由两部份组成:网络分接头(Network Tap)和数据过滤器(Packet Filter)。网络分接头从网络设备驱动程序中收集数据拷贝,过滤器决定是否接收该数据包。 Libpcap利用BSD Packet Filter(BPF)算法对网卡接收到的链路层数据包进行过滤。BPF算法的基本思想是在有BPF监听的网络中,网卡驱动将接收到的数据包复制一份交给BPF

3、过滤器,过滤器根据用户定义的规则决定是否接收此数据包以及需要拷贝该数据包的那些内容,然后将过滤后的数据给与过滤器相关联的上层应用程序。 BPF 的架构如图所示。图2-1 BPF架构Libpcap的包捕获机制就是在数据链路层加一个旁路处理。当一个数据包到达网络接口时,Libpcap首先利用已经创建的Socket从链路层驱动程序中获得该数据包的拷贝,再通过Tap函数将数据包发给BPF过滤器。BPF过滤器根据用户已经定义好的过滤规则对数据包进行逐一匹配,匹配成功则放入内核缓冲区,并传递给用户缓冲区,匹配失败则直接丢弃。如果没有设置过滤规则,所有数据包都将放入内核缓冲区,并传递给用户层缓冲区。2.2

4、Libpcap函数库1、pcap_lookupdev()函数用于查找网络设备,返回可被pcap_open_live()函数调用的网络设备名指针。2、pcap_open_live()函数用于打开网络设备,并且返回用于捕获网络数据包的数据包捕获描述字。3、pcap_lookupnet()函数获得指定网络设备的网络号和掩码。4、pcap_compile()函数用于将用户制定的过滤策略编译到过滤程序中。5、pcap_setfilter()函数用于设置过滤器。6、pcap_loop()函数pcap_dispatch()函数用于捕获数据包,捕获后还可以进行处理。7、pcap_next()函数pcap_ne

5、xt_ex()函数也可以用来捕获数据包。8、pcap_close()函数用于关闭网络设备,释放资源。2.3 Libpcap功能结构图2-2 Libpcap功能结构图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, const char *host, const char *user,const char *passwd, const char *db, unsigned int port, const char *unix_socket, u

7、nsigned int client_flag);该函数用于与MySQL数据库引擎建立连接。在执行进一步的数据操作之前,必须保证mysql_real_connect()成功返回。参数mysql是指向MySQL数据结构的指针;host是运行MySQL数据库引擎的机器的TCP/IP主机名;user 和password是MySQL数据库的合法用户和口令;db是连接的数据库名;port,unix_socket和client_flag一般取默认值。2、int mysql_query(MYSQL *mysql, const char *query);该函数用于执行query字符串中的SQL语句,query

8、必须以0结尾。如果成功,返回0。3、MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);该函数取回结果集中的下一条记录,如果没有记录或出错,返回NULL。该部分实现的功能是将数据包解析出来的各个字段的信息插入到Mysql数据库中,在这个过程中要先连接数据库,然后通过设置执行insert语句将内容插入数据库,最后关闭数据库连接。在该程序的开发过程中,在获得数据包的信息之后,将数据包存入数据库。 最后通过web 页面显示数据包的信息。此处通过LAMP实现的数据信息的web显示。3 系统特色分析传统的网络数据包处理,需要经过网络设备到操作系统内存空间、系统内存空

9、间到用户应用程序空间的2次拷贝,同时在拷贝过程中用户还要向系统发出系统调用请求。为了提高大流量网络环境下数据捕获系统报文处理的性能,有必要减少报文传输过程的中间环节,绕过操作系统内核,减少或消除数据拷贝次数,降低系统有限资源的消耗。零拷贝技术将网络数据包直接传递到系统内核预先分配的地址空间,避免CPU的参与,同时将系统内核中存储数据包的内存区域映射到用户空间的应用程序,应用程序直接对该内存进行访问,从而减少了系统内核向用户空间的内存拷贝及系统调用时间。零拷贝的关键是同步问题,包括2个方面:一是处于内核空间的网卡驱动向缓存中写入网络数据包;二是用户进程直接对缓存中的数据包进行分析。由于二者处于不

10、同的空间,使得存取变得更加复杂。4 系统自测试在centos6.0上对该程序进行了测试,测试环境搭建如图所示。图4-1 测试环境通过使用 FIFO来缓存捕获的数据包,可以有效的降低数据包的丢失率,对数据包内容信息的检测,可以有效的拦截或发现网络中潜在的安全隐患。图4-2 编程实现5 参考文献1 寇应展, 杨素敏,陈利军,王纪增. 基于Libpcap网络数据包捕获技术的改进J.军械工程学院学报, 20112 吴荣焕, 周锋. 基于 Libpcap 的高速率数据包捕获J. 中国科技论文在线, 20126 附件代码如下:#include #include #include #include #inc

11、lude #include #include #include #include #include #define SNAP_LEN 1518 / 以太网帧最大长度#define SIZE_ETHERNET 14 / 以太网包头长度 mac 6*2, type: 2#define ETHER_ADDR_LEN6/ mac地址长度struct packet_ethernet u_charether_dhostETHER_ADDR_LEN;/* destination host address */u_charether_shostETHER_ADDR_LEN;/* source host add

12、ress */u_short ether_type; /* IP? ARP? RARP? etc */;/* IP header */struct packet_ip u_charip_vhl; /* version 2 */u_charip_tos; /* type of service */u_short ip_len; /* total length */u_short ip_id;/* identification */u_short ip_off; /* fragment offset field */#define IP_RF 0x8000/* reserved fragment

13、flag */#define IP_DF 0x4000/* dont fragment flag */#define IP_MF 0x2000/* more fragments flag */#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */u_charip_ttl; /* time to live */u_charip_p; /* protocol */u_short ip_sum; /* checksum */structin_addr ip_src,ip_dst;/* source and dest address */st

14、ruct in_addr ip_src;/struct in_addr ip_dst;/* source and dest address */;#define IP_HL(ip) (ip)-ip_vhl) & 0x0f)#define IP_V(ip)(ip)-ip_vhl) 4)/* TCP header */typedef u_int tcp_seq;struct packet_tcp u_short th_sport; /* source port */u_short th_dport; /* destination port */tcp_seq th_seq; /* sequence

15、 number */tcp_seq th_ack; /* acknowledgement number */u_charth_offx2; /* data offset, rsvd */#define TH_OFF(th)(th)-th_offx2 & 0xf0) 4)u_charth_flags;#define TH_FIN0x01#define TH_SYN0x02#define TH_RST0x04#define TH_PUSH 0x08#define TH_ACK0x10#define TH_URG0x20#define TH_ECE0x40#define TH_CWR0x80#def

16、ine TH_FLAGS(TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)u_short th_win; /* window */u_short th_sum; /* checksum */u_short th_urp; /* urgent pointer */;void loop_callback(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) static int count = 0; / 包计数器const struct packet_ethern

17、et *ethernet;/* The ethernet header 1 */const struct packet_ip *ip;/* The IP header */const struct packet_tcp *tcp;/* The TCP header */const char *payload; /* Packet payload */int size_ip;int size_tcp;int size_payload;count+;/* 以太网头 */ethernet = (struct packet_ethernet*)(packet);/* IP头 */ip = (struc

18、t packet_ip*)(packet + SIZE_ETHERNET);size_ip = IP_HL(ip)*4;if (size_ip ip_p != IPPROTO_TCP ) / TCP,UDP,ICMP,IPreturn;/* TCP头 */tcp = (struct packet_tcp*)(packet + SIZE_ETHERNET + size_ip);size_tcp = TH_OFF(tcp)*4;if (size_tcp th_sport);int dport =ntohs(tcp-th_dport);printf(%s:%d - , inet_ntoa(ip-ip

19、_src), sport);printf(%s:%d , inet_ntoa(ip-ip_dst), dport);/内容payload = (u_char *)(packet + SIZE_ETHERNET + size_ip + size_tcp);/内容长度 size_payload = ntohs(ip-ip_len) - (size_ip + size_tcp);if (size_payload 0) /printf(%d bytes:n, size_payload, payload);printf(%d %d %d %d bytesn, ntohs(tcp-th_seq), nto

20、hs(tcp-th_ack), ntohs(tcp-th_flags), size_payload );write(payload, size_payload); else printf(%d %d %d n, ntohs(tcp-th_seq), ntohs(tcp-th_ack), ntohs(TH_SYN);int write(const u_char *p, int len )FILE *fp;fp = fopen(/opt/mm/bin,a);fwrite(p, len, 1, fp );fwrite(nn, 4, 1, fp );fclose(fp);void aloop_call

21、back(u_char* argument, const struct pcap_pkthdr* header, const u_char* content)write( content, header-caplen );int main(int argc, char *argv) pcap_t *handle; /* 会话句柄 */char *dev; /* 执行嗅探的设备 */char errbufPCAP_ERRBUF_SIZE; /* 存储错误信息的字符串 */struct bpf_program filter; /* 已经编译好的过滤器 */char filter_app = por

22、t 80; /* 过滤表达式 */bpf_u_int32 mask; /* 所在网络的掩码 */bpf_u_int32 net; /* 主机的IP地址 */struct pcap_pkthdr header; /* 由pcap.h定义 */const u_char *packet; /* 实际的包 */* Define the device */* dev = pcap_lookupdev(errbuf); */dev = em2;/* 网卡名称 */pcap_lookupnet(dev, &net, &mask, errbuf); /* 探查设备属性 */handle = pcap_open_live(dev, 65536, 1, 0, errbuf); /* 以混杂模式打开会话 */pcap_compile(handle, &filter, filter_app, 0, net); /* 编译并应用过滤器 */pcap_setfilter(handle, &filter);pcap_loop( handle, 10, loop_callback, NULL);pcap_close(handle); /* 关闭会话 */return(0);

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

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