gpt4 book ai didi

c - 是否可以列出系统中当前 的所有 sk_buff?

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:36 24 4
gpt4 key购买 nike

我打算开发一个应用程序来监控特定端口上的流量。为此,我需要列出系统中所有 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)buff 的。我只是简单地声明了一个 sk_buff 实例..就是这样..请帮助我在系统中实际捕获他们的实时 Sk_buff。

编辑

我已经尝试了所有顶级谷歌搜索结果。他们对 sk_buff 本身给出了很好的描述,但没有一个真正展示如何做我特别感兴趣的事情。

最佳答案

没有标准化的方法。默认情况下,新创建的 skb 不会放入任何您可以读取的列表中(也就是说,当它们刚从 skb_alloc 中出来时),因此,无法从随机的内核中的代码点,例如您的模块。不过,您至少有两个选择(都需要修改核心内核代码):

  1. 由于所有 skbuff 都是从 kmem_cache 池中分配的,您可以通过一些告诉您所有已分配对象的函数来增强 kmem_cache 的功能。
  2. 在 __alloc_skb 函数中,将所有新分配的 skb 添加到您喜欢的数据结构中(不要忘记在释放 skb 时再次删除它们)。这将成为主要瓶颈,但这是您必须付出的代价。

像往常一样,问题:为什么?

关于c - 是否可以列出系统中当前 <LIVE> 的所有 sk_buff?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com