linux - libpcap 如何从驱动程序接收数据包?

标签 linux networking libpcap

有人可以给我指出一个好的起点来了解 libpcap 如何从网络驱动程序获取数据包吗?我打算用快速实现替换接收函数。

最佳答案

“接收函数”是:

  • 标准驱动程序接收函数,与用于接收数据包并将其交给常规网络堆栈的函数没有区别;
  • 常规网络堆栈的“数据包套接字”部分。

Some Intel slides on DPDK似乎表明 DPDK 让用户空间代码更直接地与网络适配器对话。这意味着将它与 libpcap 一起使用的正确方法是编写一个使用 DPDK 的 libpcap“模块”。

一段时间以来,Libpcap 支持使用多个“模块”来捕获流量的能力。这些不是可以在运行时加载的插件模块(这可能有一天会发生,但是,由于 libpcap 可能需要额外的权限才能捕获流量,因此必须完成对第三方插件模块的支持非常小心,以防止不受信任的代码以这些特权运行!);它们被编译成 libpcap。

libpcap 源代码中的一些模块示例,除了各种操作系统的“默认”模块之外,还有用于 Myricom NIC 的 pcap-snf.cpcap-dag.c 用于 Endace DAG 卡。

如果您想进一步研究,最好订阅 tcpdump-workers mailing list并在那里继续讨论。 (这不是一个流量很高的列表,尽管它的名字是为 libpcap 和 tcpdump 的用户和开发人员准备的;作为编写捕获模块的人,您将属于“libpcap 的开发人员”类别。)

关于linux - libpcap 如何从驱动程序接收数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189078/

相关文章:

http - 从 PCAP 嗅探重建数据

c - 如何使用 libpcap 中的 "pcap_lookupdev()"?

c++ - 使用 libpcap 和 c++ 构建错误 pcap_loop

linux - 将文件内容传递给 linux 命令参数

linux下php从串口读取数据

linux - udev 规则从/proc/devices 中列出的字符设备创 build 备节点

java - ExecutorService 的 invokeAll() 会同时运行任务,或者完全取决于硬件(运行执行程序服务的地方)和网络

linux - 在 Linux 上不使用 Qt 运行我的应用程序

security - 如何防止基于UDP的 channel 变成 “backdoor”?

c++ - DeleteIPAddress 和 AddIpAddress 问题