gpt4 book ai didi

c - Winpcap 代码 - 捕获在循环中丢失数据包

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:41 25 4
gpt4 key购买 nike

我有一个循环来使用 pcap_next_ex 捕获数据包,并且在每次迭代中我都会根据处理数据包进行大量函数调用。这些东西可以通过循环中的 Sleep() 调用来模拟。然后我在 pcap_next_ex() 循环中调用 Sleep 会发生什么?

pcap_pkthdr* header = NULL;

UCHAR* content = NULL;

pcap = pcap_open(adapterName.c_str(), 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, NULL);

//Set to nonblock mode?

while (INT res = pcap_next_ex(pcap, &header, const_cast<const UCHAR**>(&content)) >= 0)
{
if (res != FALSE)
{
if (content)
{
//Here i do the stuff which I will simulate with a Sleep() call

Sleep(200);
}
}
}

我见过使用 pcap_next_ex 并将数据包保存在 vector 中以便稍后用另一个线程处理它们的代码,这种方法显着减少了这些东西的时间,但并不能说服我很多。我应该使用这种方法吗?

我想使用其他 winpcap 函数以“非阻塞”模式捕获数据包并为每个到来的数据包调用一个事件...使用 winpcap 不丢失数据包的最佳方法是什么?

任何帮助将不胜感激。问候。

最佳答案

WinPcap 将它捕获的数据包存储到一个大小有限的环形缓冲区中。如果数据包字节数达到环形缓冲区大小,旧数据包将被丢弃,以便WinPcap存储新数据包。

因此,您应该尽可能频繁地调用pcap_next_ex,以便在数据包被丢弃之前获得尽可能多的数据包。

在专用线程中调用pcap_next_ex并在另一个线程中处理数据包是一种很好的做法,因为这种方式可以最频繁地调用pcap_next_ex

关于c - Winpcap 代码 - 捕获在循环中丢失数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41193231/

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