我想写一个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/