使用以下代码,运行可执行文件时出现此错误:
...
dev = pcap_lookupdev(errbuf);
if(dev == NULL)
{
printf("%s\n",errbuf);
exit(1);
}
printf("DEV: %s\n",dev);
descr = pcap_open_live(dev,BUFSIZ,0,-1,errbuf);
if(descr == NULL)
{
printf("pcap_open_live(): %s\n",errbuf);
exit(1);
}
packet = pcap_next(descr,&hdr);
if(packet == NULL)
{
printf("Didn't grab packet\n");
exit(1);
}
...
错误:
pcap_open_live(): gbeth0: BIOCSRTIMEOUT: Invalid argument
当我改变
descr = pcap_open_live(dev,BUFSIZ,0,-1,errbuf);
到
descr = pcap_open_live(dev,BUFSIZ,0,1,errbuf);
嗅探器没有抓取任何东西,程序退出时出现此错误:没有抓取数据包 当我将1改为0时,除了有错误之外,它不会抓取任何东西。 我该怎么办?
答案 0 :(得分:3)
-1 NOT 是任何平台上pcap_open_live()
的有效超时参数。
0,作为超时参数,在不同平台上的行为可能不同,并且不推荐。
并不保证pcap_next()
永远等待数据包到达;如果超时到期,它可能返回NULL。如果要捕获至少一个数据包,请尝试循环,直到pcap_null()
不返回NULL。