linux - 丢弃包含字符串 linux 内核模块的数据包

标签 linux kernel kernel-module netfilter

我正在尝试丢弃包含字符串的网络数据包:即,如果网页上显示“免费下载”,我需要我的内核模块来丢弃包含该字符串的数据包。我正在尝试扫描 netfilter Hook 中的 sk_buff,但不确定这是否是查找字符串的正确位置。这是代码:

unsigned int hook_func_outgoing(void *priv,
                struct sk_buff *skb,
                const struct nf_hook_state *state) {
    int pos;
    struct ts_config *conf;
    struct ts_state statetext;
    const char *pattern = "free download";

    conf = textsearch_prepare("kmp", pattern, strlen(pattern),
                             GFP_KERNEL, TS_AUTOLOAD);

    pos = textsearch_find_continuous(conf, &statetext, skb->data, skb->len);
    printk(KERN_INFO "pos: %d", pos); 
    printk(KERN_INFO "data: %s ", skb->data); 
    if (pos != UINT_MAX){
            return NF_DROP; 
        printk(KERN_INFO "found spam\n");
    }
    textsearch_destroy(conf);
    return NF_ACCEPT; 
}

最佳答案

这并不像听起来那么容易。

我不完全了解编写用于网络过滤的内核模块,因此我无法对您的代码发表评论。但我认为这里的主要问题是您只能访问“原始”数据包。 现在的互联网大多使用 TLS (https) 加密,因此您无法在该级别读取传输内容(这很好)。这意味着您的模块只能在未加密的 HTTP 连接上工作。另一个问题可能是 HTTP 压缩,如 GZIP这也会扰乱您的数据。

关于linux - 丢弃包含字符串 linux 内核模块的数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54192942/

相关文章:

Python 类利用 Turtle 对象在 Windows 上不工作,在 Linux 上工作

linux - 运行 Perl 脚本时在 Text/CSV.pm 上出错

ubuntu - 如何检查 Linux 内核上的默认 kvm mmu?

linux - PCIe中断处理linux内核

c++ - 在 C/C++ 中检测密码保护的 MS Office 文件

linux - 用每一行的用户输入替换文件中的某些字段并保存在同一个文件中

image-processing - 提高 OpenCL 图像处理速度

c - 使用 insmod 插入模块后没有输出到终端

linux-kernel - 如何读取x86 intel处理器的PMC(Performance Monitoring Counter)

linux - 如何针对新源编译内核模块