pcap_loop和pcap_dispatch中的user参数是什么?

时间:2018-11-16 20:09:54

标签: c libpcap

我已经用了Google一堆,但是我不知道user的参数pcap_loop()是什么。我在网上找到的最好的是斯坦福大学(链接:http://yuba.stanford.edu/~casado/pcap/section3.html):

    /* allright here we call pcap_loop(..) and pass in our callback function */
    /* int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)*/
    /* If you are wondering what the user argument is all about, so am I!!   */
    pcap_loop(descr,atoi(argv[1]),my_callback,NULL);

该联机帮助页仅提及一次user参数(在函数中的实际参数之外):

  

...三个参数:一个u_char指针,该指针在用户参数中传递给pcap_loop()或pcap_dispatch()...

我觉得这无济于事。

我可以在调用pcap_loop时传递任何字符串,然后在回调处理程序中成功将其打印出来。

这仅仅是调用者可以将随机字符串传递给处理程序的一种方式?

有人知道该参数应该用于什么吗?

1 个答案:

答案 0 :(得分:3)

是的-这样您就可以从处理程序函数中传入需要访问的任何自定义数据,因此您不需要全局变量即可完成此操作。

例如

struct my_struct something; 
...
pcap_loop(descr,atoi(argv[1]),my_callback, (u_char*)&something);

现在在my_callback中,您可以访问something

void my_callback(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes) 
{
    struct my_struct *something = (struct my_struct *)user;
    ..
}

(注意,最好将user参数指定为void*,但出于传统原因,它可能是u_char*类型)