我遇到了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_next()
可以很好地捕获数据包,dump()
函数用于转储数据包中的数据。但是pcap_loop
没有捕获任何数据包,在for
循环中捕获数据包后,它就会卡住。
我正在ubuntu上编程运行在virtualbox中,网络适配器设置为“桥接”,这可能是问题吗?或者这只是代码的错误。
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:0)
这可能是你的问题:
pd = pcap_dump_open(pd, "-");
pcap_dump_open()
的签名是:
pcap_dumper_t *pcap_dump_open(pcap_t *p, const char *fname);
您可能打算传入pcap_handle
:
pd = pcap_dump_open(pcap_handle, "-");