我想检索线路上所有以太网帧的以太网帧位,无论它们是否发往我的机器(MAC 级别)。
其逻辑必须位于内核级别。
所以为了实现这一目标,我需要构建一个独立的内核模块 or 以太网驱动程序 or 以太网网络接口
注意:我刚刚开始为我的项目学习 Linux 内核模块开发。如果这不是发布此问题的适当位置,我很抱歉。
为了接收发往所有主机的帧,您必须将网络接口设置为混杂模式。
为了获取框架,您可以使用不同的替代方案:
- pcap API(库 libpcap)
- 数据包套接字:http://man7.org/linux/man-pages/man7/packet.7.html http://man7.org/linux/man-pages/man7/packet.7.html
- 看看 ebtables (我从未使用过它,所以我不确定这一点):http://linux.die.net/man/8/ebtables http://linux.die.net/man/8/ebtables
- 这里提出netfilter:如何在内核模块中捕获网络帧 https://stackoverflow.com/questions/11051625/how-to-capture-network-frames-in-a-kernel-module
如果您仍然想破解内核,则不需要创建新的以太网设备驱动程序,只需编写一个内核模块来注册以接收从以太网设备驱动程序接收的帧。查看内核文件http://lxr.free-electrons.com/source/net/core/dev.c http://lxr.free-electrons.com/source/net/core/dev.c,你可以从函数开始:
int netif_rx(struct sk_buff *skb)
这是从设备驱动程序接收帧的一个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)