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

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

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

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

事实上,有些同学和我正在尝试在用户空间中实现TCP / IP协议栈的简化版本以进行练习,我们刚刚开始.我正在阅读一些书籍,如UNP,APUE2,TC​​P / IP插图v1,v2,Linux网络架构,linux源代码等.我还有其他一些问题,我是否需要发布另一个问题?

最佳答案
如果你只想自己处理数据包,你可以使用内核模块netfilter并实现一些钩子.您可以轻松找到一些代码示例.

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

给出一些代码和解释主题文章http://www.linuxjournal.com/article/7184

这个解决方案可行,并且不太难实现,但不确定这是解决问题的自然方法.

相关文章

文件查找(find) 1 find 简单的说,就是实时查找指定的内容或条件。特点:最新、最快、最准确。 用法:...
非交互式添加分区 方法一 添加/deb/sdb 下的分区,其实位置为1到1000M,第二个分区位置为1001至3000M,...
编译安装httpd 1 去官网下载源码包 为避免非法软件,一定要去官网下载http://www.apache.org httpd-2.4...
gdisk用法 gdisk - InteractiveGUIDpartitiontable (GPT) manipulator GPTfdisk (akagdisk) isatext-mo...
1 一定用快捷键 这里简单的说下几个常用的快捷按键。 1.1 移动光标快捷键 Crtl + a 光标回到命令行...
bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径。如果test命令中列出的条件成立...