gpt4 book ai didi

c - pcap中不同线程中的数据包处理程序

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

我正在尝试使用 pcap 并希望它以一种方式工作,一旦我收到一个数据包,我希望该数据包被独立处理,而我的 pcap_loop() 仍然嗅探其他传入的数据包。

这样我就可以处理我的数据包并在指定的时间内等待 ACK。如果我没有收到 ACK,我会采取其他措施。

我不明白的是如何在数据包被嗅探后创建一个线程......以便每个数据包都独立于其他数据包进行处理。

所以它会是这样的,

    pcap_loop(handle, -1, got_packet, NULL)

当创建一个 pthread 时,我应该在哪里拥有我的代码

    pthread_create(pthread_t, NULL, &got_packet, NULL)

感谢您的帮助!

下面的代码只是捕获一个数据包然后退出。

编辑为包含代码片段:

struct parameter {
u_char *param1;
const struct pcap_pkthdr *param2;
u_char *param3;
};

pcap_loop(handle, -1, create_thread, NULL);

void create_thread(u_char *args, const struct pcap_pkthdr *header, u_char *packet)
{
struct parameter thrd_args;
thrd_args.param1 = args;
thrd_args.param2 = header;
thrd_args.param3 = packet;

pthread_t packet_handler;

pthread_create(&packet_handler, NULL, &got_packet, (void *)&thrd_args);
error handling....
pthread_exit(NULL);

}

void *got_packet(void *thrd_args)
{
struct parameters *thread_args;
thread_args = thrd_args;

u_char *args = &thread_args->param1;
const struct pcap_pkthdr *header = &thread_args->param2;
u_char *packet = &thread_args->param3;

}

最佳答案

您有充分的理由在不同的线程中处理数据包吗? pcap 驱动程序为您将数据包存储在队列中,因此如果它们在您处理之前的数据包时到达,您就不会错过它们(当然取决于您在创建嗅探器时指定的缓冲区大小)。尽管如此,您应该在 got_packet 函数中创建线程(每次嗅探数据包时 pcap 驱动程序都会调用该线程)并为其提供不同处理函数的地址,如下所示: pthread_create( pthread_t, NULL, &process_packet, NULL) 。当然,您需要以某种方式将数据包传递给新的处理线程,但我会把它留给您自己解决。

关于c - pcap中不同线程中的数据包处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23603564/

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