有人可以给我指出一个好的起点来了解 libpcap 如何从网络驱动程序获取数据包吗?我打算用快速实现替换接收函数。
最佳答案
“接收函数”是:
- 标准驱动程序接收函数,与用于接收数据包并将其交给常规网络堆栈的函数没有区别;
- 常规网络堆栈的“数据包套接字”部分。
Some Intel slides on DPDK似乎表明 DPDK 让用户空间代码更直接地与网络适配器对话。这意味着将它与 libpcap 一起使用的正确方法是编写一个使用 DPDK 的 libpcap“模块”。
一段时间以来,Libpcap 支持使用多个“模块”来捕获流量的能力。这些不是可以在运行时加载的插件模块(这可能有一天会发生,但是,由于 libpcap 可能需要额外的权限才能捕获流量,因此必须完成对第三方插件模块的支持非常小心,以防止不受信任的代码以这些特权运行!);它们被编译成 libpcap。
libpcap 源代码中的一些模块示例,除了各种操作系统的“默认”模块之外,还有用于 Myricom NIC 的 pcap-snf.c
和 pcap-dag.c
用于 Endace DAG 卡。
如果您想进一步研究,最好订阅 tcpdump-workers mailing list并在那里继续讨论。 (这不是一个流量很高的列表,尽管它的名字是为 libpcap 和 tcpdump 的用户和开发人员准备的;作为编写捕获模块的人,您将属于“libpcap 的开发人员”类别。)
关于linux - libpcap 如何从驱动程序接收数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189078/