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

What is the `user` parameter in `pcap_loop` and `pcap_dispatch`?

我有 Google 这一堆,但我不知道 user 参数是什么 pcap_loop()。我在网上找到的最好的一篇来自斯坦福 (link: 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)*/
    /* <b>If you are wondering what the user argument is all about, so am I!!</b>   */
    pcap_loop(descr,atoi(argv[1]),my_callback,NULL);

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

...three arguments: a u_char pointer which is passed in the user argument to pcap_loop() or pcap_dispatch()...

我觉得这没什么用。

我可以在 pcap_loop 的调用中传递任何字符串,并在回调处理程序中成功打印出来。这是否只是调用者可以将随机字符串传递给处理程序的一种方式?

有人知道这个参数的用途吗?

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

例如

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* 类型)