linux - 如何使用原始套接字仅监听想要的流量?

标签 linux iptables libpcap raw-sockets bpf

三个相关问题:

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

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

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

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

最佳答案

  1. Do raw sockets have any method of filtering equivalent to the in-kernel BPF (used by libpcap)?

他们确实这么做了,而且不仅仅是等价的:他们本身支持 BPF 过滤器。您可以像这样附加一个套接字:

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

(this question中有完整的示例)。

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

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

关于linux - 如何使用原始套接字仅监听想要的流量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25017987/

相关文章:

perl 按位与和按位移位

c - libpcap,将我的数据包的选择性区域保存到 pcap 文件

c - 捕获实时流量时如何开启纳秒精度?

linux - 使用主目录 linux 创建新用户

Docker 只向 localhost 公开一个端口

Linux:使用Python捕获发送到ULOG的数据包? (带宽监控项目)

amazon-ec2 - Docker隐藏调用容器的IP

linux - 如何为脚本中特定字符后发现的每个单词生成新行,并从新行前面的行添加第一个单词

python - PAM audit_log_acct_message() 失败 : Operation not permitted & User auth fails

linux - 如何在不损坏系统安装的情况下安装更新的 Perl?