【问题标题】:What is the `user` parameter in `pcap_loop` and `pcap_dispatch`?`pcap_loop` 和 `pcap_dispatch` 中的 `user` 参数是什么?
【发布时间】:2018-11-16 20:09:53
【问题描述】:

我已经在 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 的调用中传递任何字符串,并在回调处理程序中成功打印出来。这只是意味着调用者可以将随机字符串传递给处理程序吗?

有谁知道这个参数应该用来做什么?

【问题讨论】:

  • 它可能是一个已弃用的参数,不再使用但为了向后兼容而保留。
  • @FiddlingBits 有道理,但知道它最初的用途会很有趣。

标签: c libpcap


【解决方案1】:

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

例如

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

【讨论】:

  • 很好的解释,非常感谢。 现在我明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
相关资源
最近更新 更多