我已经用了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
时传递任何字符串,然后在回调处理程序中成功将其打印出来。
有人知道该参数应该用于什么吗?
答案 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*
类型)