读取linux内核中的数据包内容(netfilters)

时间:2015-11-29 08:22:14

标签: c linux-kernel firewall packet-sniffers

我正在构建一个简单的linux防火墙,使用netfilters实现为内核模块。我希望它能够进行深度包检测,为此我需要能够读取数据包的内容。我将如何继续这样做?

1 个答案:

答案 0 :(得分:0)

来自netfilter网站。

  

netfilter是Linux内核中允许内核的一组钩子   用于向网络堆栈注册回调函数的模块。一个   然后为每个数据包回叫已注册的回调函数   遍历网络堆栈中的相应挂钩。

第1步:

编写用于深度数据包检查的模块。 Linux tcp api将帮助您这样做。 请参阅此SO Question的已接受答案,这将有助于您入门。您可能希望删除:

/* Show only HTTP packets */
    if (user_data[0] != 'H' || user_data[1] != 'T' || user_data[2] != 'T' ||
            user_data[3] != 'P') {
        return NF_ACCEPT;
    }

以防您希望处理所有数据包。

第2步:

使用netfilter在内核中为上述模块实现一个钩子。