博客
关于我
kylin3.0netfilter的hooks标志变化
阅读量:707 次
发布时间:2019-03-21

本文共 1906 字,大约阅读时间需要 6 分钟。

Netfilter Hooks在不同内核版本中的定义差异及解决方案

在开发和编译Linux内核模块时,可能会遇到如下的错误:

错误信息: `NF_INET_PRE_ROUTING’ 未声明 (在此函数内第一次使用)`

理解错误信息

这个错误提示开发者在函数中试图使用了一个未定义的hook Constant `NF_INET_PRE_ROUTING`。Netfilter是一个用于网络过滤和防火墙管理的框架,其核心是通过注册tickles(稍 Chunk hooks)来处理网络流量的。

Netfilter Hooks的定义

在不同的Linux内核版本中,Netfilter hooks的定义可能会发生变化。以下是关键版本中的定义情况:

内核版本>=2.6.32

对于内核版本2.6.32及以上,hooks定义在`linux/netfilter.h`文件中。如下所示:

枚举型 nf_inet_hooks {    NF_INET_PRE_ROUTING,    NF_INET_LOCAL_IN,    NF_INET_FORWARD,    NF_INET_LOCAL_OUT,    NF_INET_POST_ROUTING,    NF_INET_NUMHOOKS  }

内核版本==2.6.18

在2.6.18版本中,hooks的定义位于`linux/netfilter_ipv4.h`文件中。如下所示:

/* IP Hooks */  /* packets之前的路由决策。*/  #define NF_IP_PRE_ROUTING~ 0  /* packets是否注入本机。*/  #define NF_IP_LOCAL_IN~ ~1  /* packets需要转发。*/  #define NF_IP_FORWARD~ ~2  /* packets可连接到本机应用程序。*/  #define NF_IP_LOCAL_OUT~~ 3  /* packets之前发送到网络中的。*/  #define NF_IP_POST_ROUTING~4  #define NF_IP_NUMHOOKS~5

内核版本>=2.6.9

自2.6.9版本开始,内核开始进行与协议分离的改进工作。Netfilter hooks变得越来越清晰,大多数hook定义已经稳定,并逐步向 Future Proofing 进行优化。此外,在2.6.32版本中,大量hook被重新定义与对应的`NF_INET_`命名空间进行映射。

解决方案

面对“NF_INET_PRE_ROUTING未声明”的错误,可以按照以下步骤进行处理:

1. 确认内核版本

首先确认正在使用的内核版本。这一步至关重要,因为不同的内核版本对Netfilter hooks的定义存在显著差异。可以通过执行`uname -r`命令来获取当前内核版本。

2. 查找Hooks定义文件

根据内核版本确定对应的Netfilter Hooks定义文件。例如:

- 对于2.6.32及以上版本,查找`/usr/src/linux-header/include/linux/netfilter.h`。 - 对于2.6.18版本,查找`/usr/src/linux-header/include/linux/netfilter_ipv4.h`。

3. 更新或安装相应内核版本

如果发现对应的hook定义文件缺失,可以考虑升级内核版本。对于一些旧版本的Linux distribution,或许需要自行编译内核以使用最新的Netfilter hooks。这通常需要额外配置和依赖管理,但对于需要最新功能的环境来说,是必须的。

4. 配置源代码

验证编译时所使用的网络过滤模块的定义是否与当前内核版本兼容。如果使用自定义Netfilter模块,需确保其定义的hook与内核版本匹配。这通常涉及调整模块的Makefile配置或对应的编译选项。

5. 验证modprobeume

在成功编译模块后,使用`modprobe Potatoe`加载该模块,并检查是否能够正常工作。在不正确定义hook的情况下,模块可能无法加载或导致网络服务中断。使用`lsmod`检查模块状态,可以帮助排查加载过程中的问题。

总结

Netfilter作为Linux内核中的关键工具,其hook系统是其核心组成之一。由于不同内核版本对hook定义的差异,就需要针对性地进行配置和调试。熟悉Netfilter hooks在不同版本中的定义可以帮助开发人员更好地应对相关错误,并充分发挥Netfilter的优势。

转载地址:http://anwrz.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | 实战—使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战篇——基于YOLOv8和OpenCV实现车速检测(详细步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战|OpenCV实时弯道检测(详细步骤+源码)
查看>>
OpenCV与AI深度学习 | 实践教程|旋转目标检测模型-TensorRT 部署(C++)
查看>>
OpenCV与AI深度学习 | 工业缺陷检测中数据标注需要注意的几个事项
查看>>
OpenCV与AI深度学习 | 干货 | 深度学习模型训练和部署的基本步骤
查看>>
OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 深度学习检测小目标常用方法
查看>>
OpenCV与AI深度学习 | 超越YOLOv10/11、RT-DETRv2/3!中科大D-FINE重新定义边界框回归任务
查看>>
OpenCV与AI深度学习 | 高效开源的OCR工具:Surya-OCR介绍与使用
查看>>
Opencv中KNN背景分割器
查看>>
OpenCV中基于已知相机方向的透视变形
查看>>
OpenCV中的监督学习
查看>>
opencv中读写视频
查看>>
opencv之cv2.findContours和drawContours(python)
查看>>
opencv之namedWindow,imshow出现两个窗口
查看>>
opencv之模糊处理
查看>>
Opencv介绍及opencv3.0在 vs2010上的配置
查看>>
OpenCV使用霍夫变换检测图像中的形状
查看>>
opencv保存图片路径包含中文乱码解决方案
查看>>