libpcap - 使用 pcap_next_ex 或 pcap_next (libpcap) 的正确方法

标签 libpcap

我在项目中看到了这种代码:

while (1)
{
  l_numPkts = pcap_next_ex( m_pcapHandle, &header, &pkt_data);
  //do something
  memcpy(dst,pkt_data,size);    
}

pcap_next_ex返回后,数据包状态将被设置为TP_STATUS_KERNEL,这意味着buf已返回内核。 代码:

 /* next packet */
 switch (handle->md.tp_version) {
  case TPACKET_V1:
  h.h1->tp_status = TP_STATUS_KERNEL;
..

在某些高速环境下,会出现内存问题吗?

使用 pcap_next/pcap_next_ex 的正确方法是什么?

最佳答案

我在 python 中卡住了这个问题 winpcapy (1.9.2009) 和 WinPcap 4.1.0.2001。

我简单地通过创建数据包数据数组的副本解决了这个问题(正如问题中提到的 memcpy 所建议的那样)。

pkt_data = pkt_data[:header.contents.len]

不确定它是否正确,但目前对我有用。

并基于 winpcap papermail 的答案pkt_data 引用的内容应该持续到下次调用 pcap_next_ex (或其他调度方法)为止。如果我做对了,因为它使用一个缓冲区来存储更多/所有数据包,所以它可以重用于其他/最后一个数据包?

问。

关于libpcap - 使用 pcap_next_ex 或 pcap_next (libpcap) 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3939314/

相关文章:

c - 通过网络发送的 MAC 地址格式

c++ - pcap_set_rfmon 不起作用?

linux - 测量每个接口(interface)的 TX 重传量

c - 为什么 pcap_loop() 和获取数据包之间有很长的延迟?

ethernet - libpcap 没有实时接收,似乎正在缓冲数据包

c - 您如何使用 Xcode 在 OS X 上以普通用户身份调试 libpcap 代码?

c - 如何使用 libpcap 通过 poll() 接收以太网帧

ubuntu - 为什么 tcpdump 只捕获过滤器接收到的一半数据包?

c++ - 在 Linux 上使用 C++ 进行 arping

c++ - 从 pcap 文件中过滤数据包