libpcap简介

1、简介

      libpcap是unix/linux平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础。Libpcap可以在绝大多数类unix平台下工作.


2、功能

(1)数据包捕获
      捕获流经本网卡的所有原始数据包,甚至对交换设备中的数据包也能够进行捕获,本功能是嗅探器的基础。
(2)自定义数据包发送
      构造任意格式的原始数据包,并发送到目标网络,本功能是新协议验证、甚至攻击验证的基础。
(3)流量采集与统计
      对所采集到的网络中的流量信息进行按照新规则分类,按指标进行统计,并输出到指定终端。利用这项功能可以分析目标网络的流量特性。
(4)规则过滤

      Libpcap自带规则过滤功能,并提供脚本编程接口,能够按照用户编程的方式对已经采集到的数据包进行过滤,以便提高分析的性能。


3、工作原理

      一个包捕获机制包含三个主要部分,分别是面向底层的包捕获引擎,面向中间层的数据包过滤器,面向应用层的用户接口。      
      Linux操作系统对于数据包的处理流程是从底到上的方式,依次经历网络接口卡、网卡驱动层、数据链路层、IP层、传输层,最后到达应用程序。
      Libpcap也是基于这种原理,Libpcap的捕获机制并不影响Linux操作系统中网络协议栈对数据包的处理。
      对应用程序而言,Libpcap包捕获机制只是提供了一个统一的API接口,用户只需要按照相关的编程流程,简单地调用若干函数就可以捕获到感兴趣的数据包。

      具体来说,Libpcap库主要由三个部分组成,网络分接头、数据包过滤器和用户API。
(1)网络分接头
      网络分接头(Network Tap)是一种链路层旁路机制,负责采集网卡数据包。
(2)数据包过滤器
      数据包过滤器(Packet Filter)是针对数据包的一种过滤机制,在Libpcap中采用BPF(BSD Packet Filter)算法对数据包执行过滤操作,这种算法的基本思想就是基于规则匹配,对伊符合条件的额数据包进行放行。
(3)用户API
      用户API是Libpcap面向上层应用程序提供的编程接口,用户通过调用相关的函数实现数据包的捕获或者发送。
      具体来说,Libpcap的工作原理可以描述为,当一个数据包到达网卡时,Libpcap利用创建的套接字从链路层驱动程序中获得该数据包的拷贝,即旁路机制,同时通过Tap函数将数据包发给BPF过滤器。
      BPF过滤器根据用户已经定义好的过滤过则对数据包进行逐一匹配,若匹配成功则放入内核缓冲区,并传递给用户缓冲区,匹配失败则直接丢弃。如果没有设置过滤规则,所有的数据包都将放入内核缓冲区,并传递给用户缓冲区。
      其具体的工作流程如下图所示:



4、抓包流程

其具体的编程流程如下:
(1)网络设备查找
      网络设备查找的目的就是发现可用的网卡,它的实现函数是pcap_lookupdev(),如果当前有多个网卡,它会返回一个网络设备名指针列表。
(2)打开网络设备
      利用第一步的返回值,用户可以决定Libpcap实用哪个网卡,当然打开这个网络设备的函数是pcap_open_live(),它返回用于捕获网络数据包的数据包捕获描述字。对于此网络设备的任何操作都要基于这个描述字。
(3)获取网络参数
      利用pcap_lookupnet()函数,可以获得指定网络设备的IP地址和子网掩码,当然这个步骤并不是必须,但是为了显示的完整性,有时候还是需要标记这些参数。
(4)编译过滤策略
      Libpcap的一个功能就是提供数据包过滤,即只采集符合规则的数据包,此项功能由函数pcap_compile()来实现,这个函数的作用即使将用户指定的过滤策略编译到过滤程序中。
(5)设置过滤器
      这是上步骤的继续,pcap_setfilter()函数用于设置上一步骤配置好的过滤器,当然要注明一点,步骤4和步骤5也不是必须的,如果不采用过滤,意味着程序会抓到所有的网络数据包。
(6)利用回调函数捕获数据包
      Libpcap提供的是一种回调的机制来获取数据包,可以采用pcap_loop()和pcap_dispatch()函数来抓取数据包,当然,也可以调用pcap_next和pcap_next_ex()函数来完成同样的工作。
      若数据包捕获到之后,应用程序就可以采用相应的方式进行数据包解析,分析其中感兴趣的信息,当然分析工作往往是整个程序的关键。
(7)关闭网络设备
      当应用程序工作完毕时,可以调用pcap_close()函数关闭网络设备,释放资源。


参考文献:百度百科

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值