是否有任何 Linux 网络 C API 可以在路由之前将每个网络数据包作为用户进行处理?

是否有任何 Linux 网络 C API 可以在路由之前将每个网络数据包作为用户进行处理?

我正在编写一些代码来创建具有用户凭证的“半公共 Wi-Fi 网络”。

我说半公共是因为它仍然是一个私人 Wi-Fi 网络(所有流量都经过加密),但它在 Wi-Fi 界面中设置为公共,以便无需 Wi-Fi 密码即可连接。

在我的服务器/路由器端,我需要拦截每个数据包,检查其权限,然后重新调度或丢弃它。为此,我使用了 IOCTL 并设置了一个(“中间路由器”)tap 接口,该接口捕获每个子网上的数据包并根据需要转发或丢弃它们。这很有效:一个子网上的数据包不能在没有经过我的代码处理的情况下进入另一个子网。但我无法阻止应用程序向网络发送未经授权和未加密的数据包(如果不在 iptables 中设置规则将除我的 API 本身之外的所有内容重定向到我的 tap 接口?)。

但我认为这种方式似乎是一种“黑客行为”。我想要做的是让内核调用我的代码来执行路由步骤。

相关内容