真正的软件在Linux和其他操作系统上是否有内核模块
我想问:Linux 上的 Apache Webserver 之类的应用程序,Wireshark 之类的应用程序,以及网络工具之类的软件以及其他必须与网络连接一起工作的现实世界应用程序,它们是否需要内核模块,如果不需要,那么它在多大程度上是正常的实践应用程序确实具有内核模块。就像当我安装一些应用程序然后内核模块安装它一样。我知道当我从 Windows 启用 IIS 服务器时,会启用特定的内核模块来执行 IIS 工作。(不知道为什么那个操作系统没有实现原始套接字 api 以便开发人员可以使用)
我的问题:前段时间我试图使用原始套接字制作 tcp 服务器,但发现这并不容易,因为内核会做各种各样的事情(如果我错了,请纠正我)
检查欺骗数据包
在数据包中添加自己的标头信息
所以我要制作一个在内核中执行以下操作的应用程序
- 配置NIC卡如读卡寄存器和报告
- 关闭网络接口
- 启动网络接口
- 从 DMA RX 读取数据包并报告接收到的平均数据包数以检测 DOS 攻击,如果检测到 DOS,则关闭特定接口/如数据包的报告计数器
应用程序将仅充当命令控制器。喜欢用户可以使用应用程序进行上述 4 点中指定的更改。
所以我想问你,如果有人喜欢在应用程序中选择嵌入式内核模块,为什么应用程序有一个内核模块是一种常见的做法,为什么这是一个重新选择的选项,
以上内容仅供学习使用。
回答
不会。Linux 程序很少有内核模块。内核模块通常用于硬件设备驱动程序。
如果程序确实需要某个内核模块,它会告诉您自己安装该模块。它不会包含模块的副本。
听起来您想制作自己的驱动程序来替换网卡的普通驱动程序。这是可能的,但没有人做到。如果您想关闭或启动网络接口,已经有一种方法可以在不编写自己的内核模块的情况下做到这一点。如果你想对数据包进行计数,已经有一种方法可以做到这一点。如果您想查看所有数据包,已经有一种方法可以做到这一点。
已经无法读取卡寄存器 - 那是因为每张卡都有不同的寄存器。但是无论你想用这些寄存器做什么,可能已经有办法做到了。