在 MAC 层捕获数据包

在 MAC 层捕获数据包

我想实现一个类似于MACsec的安全解决方案,它在中间网络节点(例如基于Linux的交换机)捕获整个数据包(包括MAC头),对数据包执行一些处理,然后将其发送出中间节点。

您能否为我指出可以帮助我做到这一点的适当资源?我目前正在研究需要修改 NIC 驱动程序的解决方案。有没有比这更简单的解决方案?其他人如何实现 MACsec?

请注意,我并不是想简单地使用 pcap 和类似方法捕获数据包。我所希望的是能够在数据包经过中间节点之前捕获它,对其进行篡改并将其发送给预期的接收者。

谢谢

答案1

如果要在 Linux 内核接收数据包时对其进行分析,则必须编写内核驱动程序,甚至可能需要修改内核本身。当接口接收数据时,处理将立即开始。任何注册为接收下一层的对象都将调用其处理程序。由于 MAC 报头不需要太多处理,因此 IP 层处理程序是第一个开始执行大量处理的处理程序。

如果您想操纵 MAC 报头并做自己的事情,您必须在收到 MAC 报头之后、IP 处理之前插入自己。或者您可以编写一个驱动程序作为虚拟 NIC。这样您就可以按照自己认为合适的方式处理数据。虚拟 NIC 将像真实 NIC 一样看到所有数据。这可能是您最好的选择,因为您不想开始乱搞内核,也不想只为自己的项目重建它。

我的答案在这里提供了几个关于 Linux 内核网络的学习链接。我还建议阅读 Rami Rosen 的《Linux 内核网络:实现和理论》。这是深入了解网络堆栈的绝佳资源。

MACSec 最终将在内核中实现。例如,IPSec 将其安全策略保存在内核中,而用户空间守护进程则跟踪隧道连接。因此,不幸的是,我认为您必须编写某种级别的内核代码才能执行所需的操作。

答案2

不久前,我想对第 2 层、第 3 层或更高层的数据包进行一些操作。我找到了一个基于 Python 的好工具来做这件事。此工具调用 斯卡皮
您可以捕获和操纵数据包。或者您可以根据需要构建基于数据包的过滤器。

相关内容