我打算开发一个监控特定端口流量的应用程序。为此,我需要列出系统中所有LIVE sk_buff的所有sk_buff数据。怎么做?
我编写了以下代码(基本上是一个内核模块。)
include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
#include </usr/src/linux-headers-2.6.38-8-generic/include/linux/skbuff.h>
int init_module(void)
{
struct sk_buff *skb;
printk(KERN_INFO "SKB 1.\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Done 1.\n");
}
但我不知道我是如何抓住 sk)的。我只是声明了一个sk_buff实例..这就是全部.. 请帮我实际抓住他们在系统中的实时Sk_buff。
我已经尝试了所有顶级谷歌搜索结果。他们给出了sk_buff本身的非常好的描述,但它们都没有显示出如何做我特别感兴趣的事情。
答案 0 :(得分:1)
没有标准化的方法。默认情况下,新创建的skbs不会被放入任何列表中(即,当它们从skb_alloc
中重新出现时),因此,无法通过随机代码点知道所有skb是否处于活动状态。内核,比如你的模块。您至少有两个选项(都需要修改核心内核代码):
像往常一样,问题是:为什么?