frag_off)));//print all, n-6ren">
gpt4 book ai didi

c - 检测内核模块 netfilter hooking 中的数据包碎片

转载 作者:行者123 更新时间:2023-11-30 18:03:39 25 4
gpt4 key购买 nike

我无法检测数据包是否分段以及数据包偏移。

我转储 header 数据

 printk("frt_offset=%d ", ((ip_header->frag_off)));//print all, not 13 bytes of it
printk("fr_cf=%d ", (ntohs(ip_header->frag_off) & IP_CE) > 0);
printk("frt_df=%d ", (ntohs(ip_header->frag_off) & IP_DF) > 0);
printk("fr_mf=%d ", (ntohs(ip_header->frag_off) & IP_MF) > 0);

但是当我下载启用了模块的文件时,我得到了以下输出:

[40432.831134] packet size=1514 timestamp=-790555865  frt_id=60370 frt_offset=64 fr_xf=0    frt_df=1 fr_mf=0
[40432.831318] packet size=1514 timestamp=-790371858 frt_id=60626 frt_offset=64 fr_xf=0 frt_df=1 fr_mf=0
[40432.831496] packet size=1514 timestamp=-790193971 frt_id=60882 frt_offset=64 fr_xf=0 frt_df=1 fr_mf=0
[40432.831905] packet size=1514 timestamp=-789785167 frt_id=61138 frt_offset=64 fr_xf=0 frt_df=1 fr_mf=0
[40432.832098] packet size=1514 timestamp=-789592131 frt_id=61394 frt_offset=64 fr_xf=0 frt_df=1 fr_mf=0
[40432.832504] packet size=1514 timestamp=-789186978 frt_id=61650 frt_offset=64 fr_xf=0 frt_df=1 fr_mf=0
[40436.131049] packet size=45 timestamp=-1785619342 frt_id=4464 frt_offset=0 fr_xf=0 frt_df=0 fr_mf=0

但据我了解,对于分段数据包,我必须获得相同的 id、不同的偏移量、标志 mf=1。我们这里还有别的东西。这里的最后一个数据包可能是来自另一个 session 的数据包。

我迷路了......

最佳答案

据我所知,当使用 netfilter Hook 时,内核中的 ip_local_deliver 函数将在调用为 LOCAL_IN 注册的 Hook 之前对 ip 数据包进行碎片整理。本地生成的数据包在运行 POST_ROUTING Hook 后调用的 ip_finished_output 函数中进行分段。

总之,查看内核代码告诉我,您只能抓取 PRE_ROUTINGFORWARD (如果不是本地生成)和 POST_ROUTING 中的片段。 code> (如果不是本地生成的)钩子(Hook)。

希望有帮助。

关于c - 检测内核模块 netfilter hooking 中的数据包碎片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8154411/

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