是否可以在数据报套接字上使用 BPF 过滤数据包?
当我尝试附加过滤器时没有发生错误,但我没有收到任何数据包。我使用 libpcap 编译了一个过滤器,该过滤器与 tcpdump 一起使用。
这是我的代码的缩短版本:
static const char filter[] = "udp[8] == 0x00";
int sock = socket(AF_INET, SOCK_DGRAM, 0);
pcap_t *pcap = pcap_open_dead(DLT_RAW, 1024);
struct bpf_program bpf_prog;
pcap_compile(pcap, &bpf_prog, filter, 0, PCAP_NETMASK_UNKNOWN);
struct sock_fprog linux_bpf = {
.len = bpf_prog.bf_len,
.filter = (struct sock_filter *) bpf_prog.bf_insns,
};
setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER, &linux_bpf, sizeof(linux_bpf));
我的机器是 ubuntu 12.04 x86。