带有筛选器的pcap_循环不捕获任何数据包

带有筛选器的pcap_循环不捕获任何数据包,c,pcap,libpcap,C,Pcap,Libpcap,我遇到pcap过滤器的问题。以下是代码的一部分: #include <pcap.h> #include <stdio.h> void pcap_fatal(const char *failed_in, const char *errbuf) { printf("Fatal error in %s: %s\n", failed_in, errbuf); exit(1); } int main() { struct pcap_pkthdr header; const u_

我遇到pcap过滤器的问题。以下是代码的一部分:

#include <pcap.h>
#include <stdio.h>

void pcap_fatal(const char *failed_in, const char *errbuf) {
printf("Fatal error in %s: %s\n", failed_in, errbuf);
exit(1);
}

int main() {
struct pcap_pkthdr header;
const u_char *packet;
char errbuf[PCAP_ERRBUF_SIZE];
char *device;
pcap_t *pcap_handle;
int i;
struct  bpf_program filter;
char filter_str[1000];
pcap_dumper_t *pd;

device = pcap_lookupdev(errbuf);
if(device == NULL)
    pcap_fatal("pcap_lookupdev", errbuf);

printf("Sniffing on device %s\n", device);

pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);
if(pcap_handle == NULL)
    pcap_fatal("pcap_open_live", errbuf);

// Set the packet filter
sprintf(filter_str, "port 80");
if(pcap_compile(pcap_handle, &filter, filter_str, 0, 0) == -1)
    fatal("create filter");
if(pcap_setfilter(pcap_handle, &filter) == -1)
    fatal("install filter");

for(i=0; i<3; i++) {
    packet = pcap_next(pcap_handle, &header);
    printf("Got a %d bytes packet\n", header.len);
    dump(packet, header.len);
}

pd = pcap_dump_open(pd, "-");

pcap_loop(pcap_handle, -1, &pcap_dump, (char *)pd);

pcap_close(pcap_handle);

}
#包括
#包括
无效pcap_致命(常量字符*输入失败,常量字符*错误){
printf(“在%s中出现致命错误:%s\n”,在中失败,errbuf);
出口(1);
}
int main(){
结构pcap_pkthdr头;
const u_char*数据包;
字符errbuf[PCAP_errbuf_SIZE];
字符*设备;
pcap_t*pcap_手柄;
int i;
结构bpf_程序过滤器;
字符过滤器_str[1000];
pcap_翻车机_t*pd;
设备=pcap_lookupdev(errbuf);
如果(设备==NULL)
pcap_致命(“pcap_lookupdev”,errbuf);
printf(“在设备%s上嗅探”,设备);
pcap_handle=pcap_open_live(设备,4096,1,0,errbuf);
if(pcap_handle==NULL)
pcap_致命(“pcap_开放_活动”,errbuf);
//设置包过滤器
sprintf(过滤器街,“端口80”);
if(pcap_编译(pcap_句柄和过滤器,过滤器str,0,0)=-1)
致命(“创建过滤器”);
如果(pcap_设置过滤器(pcap_句柄和过滤器)=-1)
致命(“安装过滤器”);

对于(i=0;i这可能是您的问题:

pd = pcap_dump_open(pd, "-");
签名为:

您可能打算传入
pcap\u handle

pd = pcap_dump_open(pcap_handle, "-");

啊,这是一个令人尴尬的错误。谢谢你的帮助。请务必注意编译器警告。编译器应该已经通知你这个错误。谢谢你的建议
pd = pcap_dump_open(pcap_handle, "-");