gpt4 book ai didi

c - pcap_dispatch/传递参数给回调函数

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

int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user)

我知道 pcap_dispatch 在收到数据包时调用回调例程,传递给回调例程的第一个参数是 pcap_dipatch 函数的最后一个参数。那么回调例程的其余两个参数呢? pcap_dispatch 从哪里获取要传递的其他参数?

最佳答案

我不完全确定我明白你在问什么,但我想我可能能够涵盖它。

首先,调度处理程序只是一个匹配此签名的函数:

void packethandler( u_char *args, const struct pcap_pkthdr* pkthdr, 
const u_char* packet )

参数从右到左分别是 libpcap 从网络接口(interface)中提取的数据包、pcap 格式的数据包 header 和数据包处理程序的参数。

我想如果有的话,第一个参数可能会给您带来麻烦。如果您需要传递多个参数,您可以这样做——这与您所期望的不太一样。如果您想传递多个参数,您可以简单地定义一个结构,而不是使用 va_args。假设 typedef struct { ... } myparams; 然后你可以通过:

(u_char*) myparamstruct

作为参数并在您的处理程序中执行:

myparams* params = (myparams*) args;

之所以可行,是因为您传递的是指针,而不是数据。指针的类型只是描述了底层的、解除引用的位置类型(一种解释数据的方式),而不是指针的实际值——因为所有指针的宽度都相同(无论如何,出于此目的)。

所以这可能包括获取这些参数。至于剩下的两个参数,正如我之前所说,这些是 libpcap 从指定的网络接口(interface)捕获的内容。本质上,每次成功提取数据包时,都会通过函数指针调用您的处理程序,数据包详细信息编码在这些参数中并通过用户提供的参数指针传递。

关于c - pcap_dispatch/传递参数给回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9243130/

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