2

三个相关问题:

  1. 原始套接字是否有任何等效于内核 BPF(由 libpcap 使用)的过滤方法?

  2. 打开原始套接字是否意味着它会接收机器上的每个IP 数据包?

  3. iptables 如何与原始套接字交互 - 原始套接字是否看到 iptables 丢弃的数据包?

BPF - http://lwn.net/Articles/599755/

4

1 回答 1

2
  1. 原始套接字是否有任何等效于内核 BPF(由 libpcap 使用)的过滤方法?

他们确实做到了,而且还不止于此:他们自己支持 BPF 过滤器。你会像这样附加一个套接字:

 setsockopt(socket, SOL_SOCKET, SO_ATTACH_FILTER, &bpf_filter, sizeof(bpf_filter));

(这个问题中有一个完整的例子)。

在过去的几年里,BPF 在 Linux 上发生了很多变化,现在您可以将它附加到各种网络挂钩上:套接字,还有 tc 入口/出口接口、XDP(在具有兼容驱动程序的 NIC 上)。另外:kprobes、tracepoints、perf events、cgroups,也许还有更多……用于跟踪/监控。

我不确定回答问题 2 和 3,抱歉。

于 2016-12-03T23:50:42.357 回答