我使用netfilter钩子函数来过滤/嗅探传出的IP数据包。我希望过滤IP层和链路层之间的传出(来自主机)数据包,以查看第二层信息,如 - 接口,MAC地址。 NF_INET_POSTROUTING不会提供mac地址信息,因为它在地址解析之前在ip_output()中被调用。
我查找了ebtables钩子函数,它们似乎与Bridge INPUT / FORWARD / OUTPUT有关。如果我明白,来自本地tcp / ip的传出数据包不会通过桥接转发挂钩。有没有办法可以挂钩Linux IP和链路层之间的数据包进行过滤(DROP或修改)......?
答案 0 :(得分:0)
我不确定是否有一种通用的方法来解决这个问题,但有些方法会浮现在脑海中:
LD_PRELOAD
套接字操作:提供具有您自己的send(|to|msg)
bonding驱动程序是后者的一个例子。在幕后,它将出口流量分散到从属设备并收集来自它们的入口流量。
我在我的uman驱动程序中试过了这个。您可以通过DebugFS配置微管理接口。绑定到uman0
虚拟接口的任何应用程序都会使其出口流量通过uman_start_xmit
并通过uman_handle_frame
进入流量,您可以在其中添加代码以决定是转发/修改/丢弃数据包。 uman
是我学士论文的副产品,可能不适合生产使用(如果你使它更健康,欢迎提出请求:-)。