我正在尝试在Linux上实现这个目标(不确定是否可能以及如何实现):我需要编写一个程序来拦截接口上的所有IP数据包,并将该数据包传递给一组特定的用户空间程序。
我所说的拦截是指,一个 IP 数据包被我的程序(可能是内核模块或特殊的用户空间程序)捕获,然后该数据包不再通过 IP 堆栈。
例如,假设操作系统正在运行许多进程(无论是在内核空间还是用户空间),A、B、C、D...等。如果在某个接口(例如 eth2)接收到 IP 数据包,我只希望A,B看到这个数据包,并且所有其他进程甚至都知道这个数据包的存在。
有人能让我走上正确的方向吗?
答案1
我想你想创建一个TUN/TAP接口。两者都将用户空间程序连接到网络。 TUN接口工作在IP层; TAP 接口工作在以太网级别。
如果您感兴趣,本教程可能有助于您开始使用 TUN/TAP 界面。它的标题是:Tun/Tap 接口教程。
如果这不是您正在寻找的答案,也许您可以提供有关您要解决的问题的更多背景信息。