libpcap错误pcap_open_live():BIOCSRTIMEOUT:参数无效

时间:2014-01-13 07:09:14

标签: pcap libpcap

使用以下代码,运行可执行文件时出现此错误:

...
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时,除了有错误之外,它不会抓取任何东西。 我该怎么办?

1 个答案:

答案 0 :(得分:3)

-1 NOT 是任何平台上pcap_open_live()的有效超时参数。

0,作为超时参数,在不同平台上的行为可能不同,并且推荐。

并不保证pcap_next()永远等待数据包到达;如果超时到期,它可能返回NULL。如果要捕获至少一个数据包,请尝试循环,直到pcap_null()不返回NULL。