从内核模块发送以太网帧

问题描述

我有一个内核模块,它想从用户空间发送预制的以太网帧,例如自定义 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 (将#修改为@)