gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:46:10 30 4
gpt4 key购买 nike

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

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com