linux netfilter 将数据包内容传递给用户空间套接字应用程序

标签 linux linux-kernel hook netfilter

我想写一个Linux 2.6 netfilter module,可以检查传入的IP包信息,比如目标IP,源IP。之后将这些信息传递给 user space 应用程序,该应用程序(即 Socket 应用程序)将在数据包到达 HOOK 后立即处理这些信息。

我想尝试两种方式:

1 。在netfilter模块里面,做一个fifo结构线,每次数据包到达hook时,把数据包信息放到fifo中。并在 /proc/example 文件系统的帮助下。用户空间app每次读取/proc/example文件,都会从fifo head中获取一个包信息。

我是 kernel 程序的新手,这个程序使我的内核崩溃了好几次。 -_-! 请问这样可行吗?

2。在netfilter模块里面,做一个字符设备,用户空间app从这个字符设备中读取数据包信息。但是我仍然不知道如何确保尽快获取数据包,有什么办法当数据包到达netfilter hook时,内核会向信息用户空间应用程序发送一些信号,然后用户空间应用程序来选择数据包信息?

非常感谢。

最佳答案

我的做法是: 创建一个内核模块以连接到您的网络事件。 然后使用可以从内核与用户空间对话的Netlink来传递数据IPC。

关于linux netfilter 将数据包内容传递给用户空间套接字应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1288906/

相关文章:

c - 来自内核线程的 get_user_pages_fast()

spring - 是否可以在 Liferay Hook 中使用 Spring @Autowired?

c - linux 机器中的哪个文件代表 gcc 标准 c 库?

linux - 对列出目录绝对路径的 ls 命令感到困惑

linux - 设备树编译器无法识别包含文件的 C 语法

linux - 为什么禁用中断会禁用内核抢占以及自旋锁如何禁用抢占

objective-c - 没有显式声明的属性 ivars 会生成哪些名称?

c# - 如何在 Windows 中获取光标下的单词?

linux - 查找所有但跳过一个文件夹

C/Unix : How to extract the bits from st_mode?