数据包构造函数.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
libpcap Libpcap (Packet Capture library),即数据包捕获函数库。该库提供的C函数接口可用于捕获经过网络接口(只要经过该接口,目标地址不一定为本机)的数据包。 它是由洛仑兹伯克利(Berkeley)试验室的研究人员Steven McCanne和Van Jacobson于1993年在Usenix‘93会议上正式提出的一种用于Unix内核数据包过滤体制 。该函数库支持Linux、Solaris和BSD系统平台。采用libpcap可以捕获本地网络数据链路层上的数据。 广泛应用于: 网络参数统计 协议分析 防火墙 入侵检测系统 网络调试 libpcap库是基于BPF(Berkeley Packet Filter:BSD包过滤器)系统的。 BPF是BSD系统在TCP/IP软件实现时所提供的一个接口,通过这个接口,外部程序可以获取到达本机的数据链路层网络数据,同时也可以设置过滤器,嵌入到网络软件中,获得过滤后的数据包。 BPF工作过程 BPF是一种内核包捕获的体系结构,它使得UNIX下的应用程序通过一个高度优化的方法读取流经网络适配器的数据包。 BPF主要由两部分组成:Network tap和Packet Filter。 Network tap是一个回调函数(callback function),它实时监视共享网络中的所有数据包,从网络设备驱动程序中搜集数据拷贝并转发给包过滤器。 包过滤器决定是否接收该数据包,以及接收该数据包的那些部分(Slice(分片)技术)。 BPF的工作原理如图4所示。 BPF过滤机制 图 BPF的结构 Libpcap库函数接口简介 libpcap所提供的主要函数如下: pcap_t *pcap_open_live();用于获取一个包捕获描述符 char *pcap_lookupdev();返回一个适于pcap_open_live()和pcap_lookupnet()函数使用的指向网络设备的指针 int pcap_lookupnet();用于返回与网络设备相关的网络号和掩码 int pcap_dispatch()或int pcap_loop();收集和处理数据包 void pcap_dump();将一个包输出到由pcap_dump_open()打开的文件中保存 int pcap_compile();用于将过滤规则字符串编译成一个内核过滤程序 int pcap_setfilter();设定一个过滤程序 int pcap_datalink();返回数据链路层类型,如10M以太网,SLIP,PPP,FDDI,ATM,IEEE802.3等 void pcap_close();关闭关联设备(文件)并回收资源 int pcap_stats(pcap_t *, struct pcap_stat *); 参数统计 int pcap_read(pcap_t *, int cnt, pcap_handler, u_char *);打开设备 Libpcap:dump文件格式 Libpcap应用步骤 利用libpcap函数库开发应用程序的基本步骤 以及几个关键的函数使用方法 1.??获取设备名 ?char *pcap_lookupdev(char *errbuf) 该函数用于返回可被pcap_open_live()或pcap_lookupnet()函数调用的网络设备名(一个字符串指针)。如果函数出错,则返回NULL,同时errbuf中存放相关的错误消息。 2.???获取网络号和掩码??? ? ?int pcap_lookupnet(char *device, bpf_u_int32 *netp,bpf_u_int32 *maskp, char *errbuf) 获得指定网络设备的网络号和掩码。netp参数和maskp参数都是bpf_u_int32指针。如果函数出错,则返回-1,同时errbuf中存放相关的错误消息。 Libpcap 3.??? 打开设备 ?pcap_t *pcap_open_live(char *device, int snaplen,int promisc, int to_ms,char *ebuf) 获得用于捕获网络数据包的数据包捕获描述字。 device参数为指定打开的网络设备名。 snaplen参数定义捕获数据的最大字节数。 promisc指定是否将网络接口置于混杂模式: promisc=1杂凑模式,0正常模式; 。 to_ms参数指定超时时间(毫秒)。 ebuf参数仅在pcap_open_live()函数出错返回NULL时用于传递错误消息。 Libpcap 4.?? 编译和设置过滤器 ?int pcap_compile(pcap_t *p, s

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档