问题描述
我有一个内核模块,它想从用户空间发送预制的以太网帧,例如自定义 ARP 和其他协议(我试图绕过 linux 上的 TCP/IP 堆栈并根据我的需要创建自定义一个) .框架是有效的,并且包含所有必要的东西。剩下的唯一部分是以某种方式将它们发送到 eth0 接口上的队列。执行此操作的最佳解决方案是什么?
为了抓取传入的数据包,我使用了具有最早钩子的 netfilter API。由于需要 sudo 以及我的自定义要求,我无法从用户空间使用原始套接字。
编辑:我能够通过 dev_queue_xmit()
实现我的目标。不过我还是想知道有没有其他直接访问驱动的方案。
static void SendFrame(void)
{
struct sk_buff* skb = dev_alloc_skb(1518);
skb->dev = __dev_get_by_name(&init_net,"eth0");
skb_reserve(skb,NET_IP_ALIGN);
skb->data = skb_put(skb,ethFrameBytes);
memcpy(skb->data,pEthFrame,ethFrameBytes);
if (dev_queue_xmit(skb) != NET_XMIT_SUCCESS)
{
printk(KERN_ERR,KERN_ERR "Error: unable to send the frame\n");
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)