三个相关问题:
原始套接字是否有任何过滤方法等同于内核内BPF(由libpcap使用)?
打开原始套接字是否意味着它在机器上接收每个 IP数据包?
iptables如何与原始套接字交互 - 原始套接字是否看到iptables丢弃的数据包?
答案 0 :(得分:2)
- 原始套接字是否有任何过滤方法等同于内核内BPF(由libpcap使用)?
醇>
他们确实做到了,而且它不仅仅是等价的:它们本身也支持BPF过滤器。你会附上这样的套接字:
setsockopt(socket, SOL_SOCKET, SO_ATTACH_FILTER, &bpf_filter, sizeof(bpf_filter));
(this question中有一个完整的例子。)
在过去的几年里,BPF在Linux上经历了很多变化,你现在可以将它附加到各种网络连接:套接字,还有tc入口/出口接口,XDP(在带有兼容驱动程序的网卡上) 。另外:kprobes,tracepoints,perf事件,cgroups,或许更多...用于跟踪/监控。
我不太清楚回答问题2和3,抱歉。