【问题标题】:Do real software have kernel modules inside them on Linux and other OSes在 Linux 和其他操作系统上,真正的软件内部是否有内核模块
【发布时间】:2021-05-21 04:46:04
【问题描述】:

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

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

检查欺骗数据包

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

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

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

应用程序将仅充当命令控制器。就像用户可以使用应用程序进行上述 4 点指定的更改。

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

以上内容仅供学习使用。

【问题讨论】:

  • 据我所知,这不是很常见,但确实存在像 DPDK 这样的东西(它处理用户空间中的网络设备,部分原因是在内核中有自己的友好模块以允许它控制网络硬件)。对于您想要的原始 IP 或数据包套接字可能会起作用。有关可移植数据包捕获和注入的现有解决方案,另请参见 libpcap(或 Windows 的 Npcap)等库。如果你不想检查数据包内容,你可以只读取接口统计信息。
  • @Hasturkun HW 是什么意思是硬件
  • @Hasturkun Npcap 不也安装驱动程序(它是否要求用户安装驱动程序——如果不是那么为什么)。它如何处理原始套接字或数据包读取。 windows就像一个黑匣子,你看不到里面的任何东西

标签: c linux kernel-module


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-11-17
    • 1970-01-01
    • 2020-02-27
    • 2016-10-21
    • 2012-04-24
    • 1970-01-01
    • 2018-05-17
    • 2012-08-27
    • 1970-01-01
    相关资源
    最近更新 更多