gpt4 book ai didi

ubuntu - Ubuntu 18.04 中未调用 Netfilter Hook - 内核 4.18

转载 作者:太空宇宙 更新时间:2023-11-03 17:04:18 25 4
gpt4 key购买 nike

我正在尝试创建一个简单地捕获 ICMP 数据包的 netfilter Hook 。我终生无法弄清楚我做错了什么(我是编写内核模块的新手)。我到目前为止的代码是

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <linux/skbuff.h>
#include <linux/udp.h>
#include <linux/icmp.h>
#include <linux/ip.h>
#include <linux/inet.h>

#define DIP "1.2.3.4"

static struct nf_hook_ops nfho;
static struct net n;

MODULE_DESCRIPTION("Monitor packets");
MODULE_AUTHOR("john");
MODULE_LICENSE("GPL");

unsigned int hook_func(void *priv, struct sk_buff *skb, const struct nf_hook_state *state)
{
printk(KERN_INFO "hook!\n");
return NF_ACCEPT;
}

int init_module()
{
int ret;
nfho.hook = hook_func;
nfho.hooknum = NF_INET_PRE_ROUTING;
nfho.pf = AF_INET;
nfho.priority = NF_IP_PRI_FIRST;

ret = nf_register_net_hook(&n, &nfho);

if (ret != 0)
{
printk(KERN_INFO "module is NOT loaded into the kernel\n");
return -1;
}
else
{
printk(KERN_INFO "module IS loaded into the kernel\n");
return 0;
}
}

void cleanup_module()
{
nf_unregister_net_hook(&n, &nfho);
printk(KERN_INFO "module has been unloaded\n");
}

从我的系统日志来看,内核模块似乎已正确加载/卸载(从打印消息来看)。我没有收到“钩子(Hook)!”当我 ping 我的机器时的消息。是pf写错了吗?错误的 Hook 优先级?我能以某种方式调试它吗?

应该说我在虚拟机中,并且我正在从另一台不是主机的物理机 ping 虚拟机。我的操作系统是 Ubuntu 18.04 LTS,“uname -a”的结果:Linux ubuntu 4.18.0-20-generic#21~18.04.1-Ubuntu SMP Wed May 8 08:43:37 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

我知道有一些未使用的包含。这是改编自另一个内核版本的代码示例,我打算稍后填写。我真的希望有人能告诉我从哪里开始寻找,或者看看我做错了什么。

先谢谢大家

最佳答案

似乎缺少 LKM 入口/导出点:

module_init(init_module)  //for insmod
module_exit(cleanup_module) //for rmmod

关于ubuntu - Ubuntu 18.04 中未调用 Netfilter Hook - 内核 4.18,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56451830/

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