gpt4 book ai didi

c - 我不知道为什么 ip_hdr(skb) 返回 NULL

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

static unsigned int main_hook(unsigned int hooknum , struct sk_buff *skb , const struct net_device *in , const struct net_device *out, int (*okfn)(struct sk_buff*))
{
int i=0;
struct iphdr *iph = ip_hdr(skb);
unsigned long saddr = 0 , daddr = 0;
unsigned long snet = 0; //dnet =0;
int dst_cnt=0 , src_cnt=0;

//printk("netfilter called\n");

//down(&sema);
Netfilter_Execute++;

saddr = iph->saddr;
daddr = iph->daddr;

当我执行这个模块程序时,linux 关闭并重新启动。当我测试程序时,iph 为空,所以 saddr = iph->saddr 和 daddr = iph->daddr 是错误的。

我不知道为什么 iph = ip_hdr(skb) 返回 NULL

最佳答案

问题可能取决于你使用的钩子(Hook),您必须注意与内核路由模块相关的 Hook 位置。

让我给你看这两个例子

  1. 如果你使用

    NF_IP_LOCAL_OUT

    您在钩子(Hook)中收到的数据包不会抛出内核中的路由模块,因此它不会有 header

  2. 如果你使用

    NF_IP_LOCAL_IN

    数据包将抛出路由模块,但路由模块将删除数据包的 header 并将其路由到内部进程

关于c - 我不知道为什么 ip_hdr(skb) 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40403691/

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