微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一个libpcap简单的例子,100%的CPU使用率

在运行下面的代码时,其中一个cpu内核的使用率达到100%。 有或没有交通。 哪里不对?

示例代码

#include <stdio.h> #include <stdlib.h> #include <pcap.h> #include <errno.h> void my_callback(u_char *args,const struct pcap_pkthdr* pkthdr,const u_char* packet) { //nothing,nothing at all... //printf("+"); } int main(int argc,char **argv) { int i; char *dev; char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr; const u_char *packet; struct bpf_program fp; /* hold compiled program */ bpf_u_int32 maskp; /* subnet mask */ bpf_u_int32 netp; /* ip */ if(argc != 2){ fprintf(stdout,"Usage: %s "expression"n",argv[0]); return 0; } /* Now get a device */ dev = pcap_lookupdev(errbuf); if(dev == NULL) { fprintf(stderr,"%sn",errbuf); exit(1); } /* Get the network address and mask */ pcap_lookupnet(dev,&netp,&maskp,errbuf); /* open device for reading in promiscuous mode */ descr = pcap_open_live(dev,BUFSIZ,1,-1,errbuf); if(descr == NULL) { printf("pcap_open_live(): %sn",errbuf); exit(1); } /* Now we'll compile the filter expression*/ if(pcap_compile(descr,&fp,argv[1],netp) == -1) { fprintf(stderr,"Error calling pcap_compilen"); exit(1); } /* set the filter */ if(pcap_setfilter(descr,&fp) == -1) { fprintf(stderr,"Error setting filtern"); exit(1); } /* loop for callback function */ pcap_loop(descr,my_callback,NULL); return 0; }

编译时使用: gcc example.c -o example -lpcap

运行: ./example "tcp"或者你喜欢的filter。

创build一个附加到控制台的进程,但带有redirect的标准IO句柄

如果内核支持IPv6,如何从用户空间进行testing?

如何在写入文件时放置换行符

C ++键盘键码和JAVA KeyEvent键码之间的区别

googletest:如何设置?

正如你所看到的,这是典型的例子,循环的main和callback函数: pcap_loop(descr,NULL);

callback是空的(无用的),但只是表明问题不在callback中。

在QueueUserAPC中指定的callback不会被调用

ShellExecute获取打开文件夹的权限

C中的exec家族函数

在C ++中,我可以使用multithreading工具将UNIX信号与主程序同步吗?

WriteConsole()奇怪的字符?

在这里指定了timeout -1 :

descr = pcap_open_live(dev,errbuf);

它将pcap_loop变成一个忙碌循环,因为poll立即超时。

如果没有其他值的理由,请使用类似1000 (毫秒)的东西。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐