在 Linux 和其他操作系统上,真正的软件内部是否有内核模块

Do real software have kernel modules inside them on Linux and other OSes

我想问:Linux、Wireshark 上的 Apache Webserver 等应用程序,以及网络工具等软件和其他必须与网络连接一起工作的现实世界应用程序,它们是否需要内核模块,如果不,那么应用程序确实具有内核模块的正常做法在多大程度上是正常的。就像当我安装一些应用程序时,内核模块会随之安装。我知道当我从 windows 启用 IIS 服务器时,特定的内核模块会启用 IIS 工作。 (不知道为什么 OS 没有实现原始套接字 api 以便开发人员可以使用)

我的问题:前段时间我尝试使用原始套接字制作 tcp 服务器,发现这并不容易,因为内核会做各种各样的事情,比如(如果我错了请纠正我)

检查欺骗性数据包

在数据包中添加自己的headers信息

所以我准备制作一个在内核中执行以下操作的应用程序

  1. 配置 NIC 卡,如读取卡寄存器和报告
  2. 正在关闭网络接口
  3. 正在启动网络接口
  4. 从 DMA RX 读取数据包并报告接收到的平均数据包数以检测 DOS 攻击,如果检测到 DOS 则关闭特定接口/类似数据包的报告计数器

并且该应用程序将仅充当命令控制器。喜欢的用户可以使用应用程序进行以上4点指定的更改。

所以我想问你,应用程序有一个内核模块是常见的做法吗?如果有人喜欢在应用程序中选择嵌入式内核模块,为什么这是一个备选方案,

以上内容供学习之用

没有。 Linux 程序很少有内核模块。内核模块通常用于硬件设备驱动程序。

如果程序确实需要某个内核模块,它会告诉您自己安装该模块。它不会包含模块的副本。

听起来您想制作自己的驱动程序来替换网卡的普通驱动程序。这是可能的,但没有人这样做。如果你想关闭或启动网络接口,已经有一种方法可以在不编写自己的内核模块的情况下做到这一点。如果你想计算数据包,已经有办法做到这一点。如果你想看到所有的数据包,已经有办法做到这一点。

已经无法读取卡寄存器 - 那是因为每张卡都有不同的寄存器。但是无论你想这些寄存器做什么,可能已经有办法做到了。