首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux libpcap编程

linux libpcap编程
EN

Stack Overflow用户
提问于 2012-04-06 16:15:02
回答 1查看 452关注 0票数 0

一个相同的程序可以在Opensuse 12.1 (x64)上成功运行,但不能在Fedora16 (x64)上运行,它显示"Err can pcap_compile“我不知道这些操作系统之间有什么不同,我认为它们是完全相同的,但我确保Opensuse 12.1可以成功过滤和捕获数据包。

代码语言:javascript
复制
int init_capture() {
int i;
char *dev;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t* descr;
const u_char *packet;
struct pcap_pkthdr hdr; /* pcap.h */
struct ether_header *eptr; /* net/ethernet.h */
struct bpf_program fp;
char portfilter[20]= "dst port 1521";
bpf_u_int32 maskp;
bpf_u_int32 netp;
/* grab a device to peak into... */
dev = pcap_lookupdev(errbuf);
if (dev == NULL) {
    printf("%s\n", errbuf);
    exit(1);
}
pcap_lookupnet(dev,&netp,&maskp,errbuf);
/* open device for reading */
descr = pcap_open_live(dev, BUFSIZ, 0, -1, errbuf);
if (descr == NULL) {
    printf("pcap_open_live(): %s\n", errbuf);
    exit(1);
}
if (pcap_compile(descr,&fp,portfilter,0,netp) == -1)
{
    printf("Err calling pcap_compile\n");
    exit(1);
}
if (pcap_setfilter(descr,&fp) == -1)
{
    printf("Err setting filter \n");
    exit(1);
}

/* allright here we call pcap_loop(..) and pass in our callback function */
/* int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)*/
/* If you are wondering what the user argument is all about, so am I!!   */
pcap_loop(descr, -1, capture_callback, NULL);

fprintf(stdout, "\nDone processing packets... wheew!\n");
return 0;

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-19 04:17:16

如果pcap_compile()失败,您应该执行以下操作

代码语言:javascript
复制
printf("Err calling pcap_compile: %s\n", pcap_geterr(descr));

看看它报告了什么问题。这可能会帮助我们确定Fedora上出了什么问题;如果不知道故障是什么,就很难确定如何修复它-过滤器应该在任何支持IP的链路层类型上工作,而pcap_lookupdev()应该总是返回这样的设备。

但是,如果您正在打开一个没有分配IPv4地址的设备,那么pcap_lookupnet()可能会失败。如果失败,您可能只需要将0作为netpmaskp传递-您可以在调用pcap_lookupnet()之前将它们初始化为0。然而,这应该不会有什么不同-网络和掩码不应该是像dst port 1521这样的过滤器所必需的。

(顺便说一句,-1不是pcap_open_live()的有效超时参数-我会使用1000 -但在Linux上可能没问题;如果无效,打开将失败,但打开不会失败,因为它在pcap_compile()中报告了一个错误。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10040883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档