三个相关问题:
原始套接字是否有任何等效于内核 BPF(由 libpcap 使用)的过滤方法?
打开原始套接字是否意味着它会接收机器上的每个IP 数据包?
iptables 如何与原始套接字交互 - 原始套接字是否看到 iptables 丢弃的数据包?
三个相关问题:
原始套接字是否有任何等效于内核 BPF(由 libpcap 使用)的过滤方法?
打开原始套接字是否意味着它会接收机器上的每个IP 数据包?
iptables 如何与原始套接字交互 - 原始套接字是否看到 iptables 丢弃的数据包?
- 原始套接字是否有任何等效于内核 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,抱歉。