Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何防止内核将数据包传递到网络层?_Linux_Sockets - Fatal编程技术网

Linux 如何防止内核将数据包传递到网络层?

Linux 如何防止内核将数据包传递到网络层?,linux,sockets,Linux,Sockets,网卡接收到的帧将由驱动程序处理,然后由Linux内核传递到协议栈的上层 有没有一种简单的方法可以防止内核将数据包传递到网络层?这样我就可以从数据链路层接收帧并自己处理所有数据包(也许应用层程序会被重写) 我认为重新编译内核是必要的,这应该通过修改softirq或netif_rx之类的函数中的代码或每个cpu的列表队列中的代码来完成吗 事实上,我和一些同学正在尝试在用户空间中实现一个简化版的TCP/IP协议栈来进行练习,我们才刚刚开始。我正在读一些书,比如UNP、APUE2、TCP/IP图解v1、

网卡接收到的帧将由驱动程序处理,然后由Linux内核传递到协议栈的上层

有没有一种简单的方法可以防止内核将数据包传递到网络层?这样我就可以从数据链路层接收帧并自己处理所有数据包(也许应用层程序会被重写)

我认为重新编译内核是必要的,这应该通过修改softirq或netif_rx之类的函数中的代码或每个cpu的列表队列中的代码来完成吗


事实上,我和一些同学正在尝试在用户空间中实现一个简化版的TCP/IP协议栈来进行练习,我们才刚刚开始。我正在读一些书,比如UNP、APUE2、TCP/IP图解v1、v2、Linux网络体系结构、Linux源代码等等。我确实有一些其他问题,我需要发布另一个问题吗?

如果您只想自己处理数据包,您可以使用内核模块netfilter并实现一些挂钩。您可以很容易地找到一些代码示例

在不同的钩子中,您可以选择处理数据包并将其返回内核或丢弃它。这只是一个要更改的返回码

文章给出了主题的一些代码和解释:


这个解决方案会起作用,而且不太难实现,但不确定它是否是解决问题的自然方式。

听起来像是你在寻找的东西。

你想做什么?更改内核可能不是那么容易。你真的应该描述你试图解决的问题。下面的一个答案建议使用netfilter。另一种选择可能是使用pcap库直接获取原始数据包。在我们知道你真正想要解决的问题之前,我们不会知道你的正确答案是什么。我编辑了我的问题,真的希望得到一些进一步的建议。是的,这很有效。这与我想要的有点不同,但是实现起来更简单。也许我需要找到一些防火墙,它可以丢弃arp数据包,这样所有的数据包都能被控制