BPF 程序无效 - pcap 嗅探

问题描述

大家好,我正在尝试使用 pcap 库来嗅探数据包。我只有一个问题无法解决ERROR: BPF program is not valid

BPF program is not valid

我正在尝试开始嗅探,但这个错误阻止了我我在网上搜索并没有找到任何东西。

我的代码基于这个程序:https://github.com/levans248/packetSniffingAndSpoofing/blob/master/sniff.c

这是由于 SEED 实验室,我知道人们在做作业时不会提供帮助,但我只需要弄清楚为什么会发生这种情况,我不知道。

#include <pcap.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>

void got_packet(u_char *args,const struct pcap_pkthdr *header,const u_char *packet)
{
    printf("Got a packet \n");
}

int main()
{
    pcap_t *handle;
    char errbuf[PCAP_ERRBUF_SIZE];
    struct bpf_program fp;
    char filter_exp[] = "ip proto icmp";
    bpf_u_int32 net;

    // Open live pcap session
    handle = pcap_open_live("enp0s3",BUFSIZ,1,1000,errbuf);
    // Compile Filter into the Berkeley Packet Filter (BPF)
    pcap_compile(handle,&fp,filter_exp,net);

    if (pcap_setfilter(handle,&fp) == -1)
    {
        pcap_perror(handle,"ERROR");
        exit(EXIT_FAILURE);
    }

    // Sniffing..
    pcap_loop(handle,-1,got_packet,NULL);
    pcap_close(handle);

    return 0;
}

解决方法

ip proto doc - C-shell

filter_exp 中有语法错误, 我正在研究 C-Shell,因此需要更改为 ip proto \icmp

非常感谢大家!