libpcap原理阐述



  • |
  • 浏览:206
  • |
  • 更新:2013-05-03 12:42
一键约师傅
百度师傅为你的电脑系统,选一个靠谱师傅!

※BPF本质上来说是一也个设备驱动(device driver),能够被应用程序用来读取网络上通过这个网络适配器的包。

※但是BPF又是一个特殊的驱动,因为它并没有直接控制网络适配器,而是网络适配器真正的设备驱动调用BPF来传递数据。※BPF正常情况下被用作诊断工具去检查与本机相连的网络的流通状况。※一个BPF设备能够配置一个filter,根据这个filter的特征,来忽略或者接收到来的包。※BPF拥有两个组件:        the network tap        the packet filterthe network tap 收集来自网络设备驱动的包的一个拷贝,并把它专递给监听程序。the filter 决定是否接收这个包并且把它拷贝给监听程序※BPF为每一个要求服务的抓包程序关联一个filter和两个buffer。BPF分配buffer 且通常情况下它的额度是4KB    the store buffer 被使用来接收来自适配器的数据;    the hold buffer被使用来拷贝包到应用程序。※通常情况下, 当一个包到达网络接口时, 数据链路设备驱动将把它发送到系统协议栈。但是当BPF在这个接口上面监听时,网络设备驱动将首先调用 BPF的network tap函数。这个tap函数将包送入每一个监听程序的filter。而用户定义的filter决定:    是否接收这个包;    每一个包有多少字节将会被保存。※如果filter接收这个包, 那么tap 将会从数据链路层驱动的缓存中拷贝这个数目的字节数到 与这个filter关联的store buffer中(store buffer在内核中定义)。同时,网络接口的设备驱动将会重新获得控制权,且正常的协议处理将会进行。※监听进程执行read系统调用去从BPF(hold buffer)接收包,并将阻塞于此。当hold buffer 满的时候(或者当超时发生时),BPF将会拷贝这些数据到进程内存空间,且唤醒这个进程。※监听程序能够一次接收多个包。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值