用户指定要传递到callback例程的第一个自变量。 返回值 成功完成时,pcap_loop子例程返回 0。 如果在savefile中已达到 EOF ,那么也会返回 0。 如果pcap_loop子例程不成功,那么返回 -1。 在这种情况下,可以使用pcap_geterr子例程或pcap_perror子例程来获取错误文本。
这是合乎逻辑的,因为pcap_loop()无论如何都不知道如何处理返回值。 第一个参数对应于pcap_loop()的最后一个参数。 无论传递什么值,因为pcap_loop()的最后一个参数在每次调用函数时都会传递给回调函数的第一个参数。 第二个参数是pcap头,它包含有关何时嗅探数据包的信息,它的大小等等。pcap_pkthdr结构在pcap.h...
第一个参数:返回的pcap_t类型的指针 第二个参数:需要抓的数据包的个数,一旦抓到了cnt个数据包,pcap_loop立即返回。负数的cnt表示pcap_loop永远循环抓包,直到出现错误。 第三个参数:一个指针,它必须是如下的形式: void callback(u_char * userarg, const struct pcap_pkthdr * pkthdr, const u_char * pack...
返回值为-1,发生错误。 返回值为-2,使用pcap_breakloop()结束循环。 回调函数抓包还有一种方法, pcap_dispatch() 。 区别是:pcap_ dispatch()当超时时间到了(timeout expires)就返回(尽管不能保证),而pcap_loop()不会因此而返回,只有当cnt数据包被捕获。 所以,pcap_loop()会在一小段时间内,阻塞网络的利用。
返回值是一个’pcap_t’指针,它可以作为下一步调用(例如pcap_compile()等)的参数,并且指定了一个已经打开的Winpcap会话。在遇到问题的情况下,它返回NULL并且’errbuf’变量保存了错误信息。 函数1: int pcap_loop( pcap_t* p, int cnt, pcap_hander callback, ...
user值一般为NULL 举例: pcap_loop(adhandle, 0, packet_handler, NULL); void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) { struct tm *ltime; char timestr[16]; ltime=localtime(&header->ts.tv_sec); /*将时间戳转变为易读的标准格式*/ ...
返回值: 成功返回0,失败返回负数 参数: p:Libpcap句柄 cnt:指定捕获数据包的个数,如果是-1,就会永无休止的捕获 callback:回调函数 user:向回调函数中传递的参数typedef void (*pcap_handler)(u_char *,const struct pcap_pkthdr *,const u_char *); 设置过滤规则 1.编译规则(将用户能阅读的规则转换...
p是由pcap_open_live()返回的所打开的网卡的指针;cnt用于设置所捕获数据包的个数;pcap_handler是与void packet_handler()使用的一个参数,即回调函数的名称;user值一般为NULL pcap_loop原型是pcap_loop(pcap_t *p,int cnt,pcap_handler callback,u_char *user) ...
pcap_loop(pd, 10, eth_printer, NULL); 主循环,开始抓包,共抓10个(由第二个参数指定),抓到包后就进入函数 eth_printer pcap_close(pd); 结束 这个就是最简单的程序了,其中还有个不明, 在pcap_loop参数 eth_printer的类型是pcap_handler,pcap_handler定义如下: ...