如何在linux上拦截IP数据包

use*_*098 4 linux networking tap packet

我试图在 Linux 上实现这个目标(不确定是否可行以及如何实现):我需要编写一个程序来拦截接口上的所有 IP 数据包,并将这个数据包传送到一组特定的用户空间程序.

通过拦截,我的意思是,我的程序(可能是内核模块或特殊的用户空间程序)捕获了一个 IP 数据包,然后该数据包不再通过 IP 堆栈。

例如,假设操作系统正在运行大量进程(在内核空间或用户空间中),A、B、C、D...等。如果在某个接口接收到 IP 数据包,请说 eth2 ,我只希望A,B看到这个包,其他所有进程甚至都知道这个包的存在。

有人能把我带到正确的方向吗?

200*_*ess 6

我想你想创建一个TUN/TAP 接口。两者都将用户空间程序连接到网络。TUN接口工作在IP层;TAP 接口工作在以太网级别。

如果您感兴趣,本教程可能有助于您开始使用 TUN/TAP 界面。它的标题是:Tun/Tap 界面教程

如果这不是您要寻找的答案,也许您可​​以提供有关您要解决的问题的更多背景信息。