jhl19880722 发表于 2010-08-08 16:06

netfilter捕获arp报文,求解

下面是我写的一小段代码
/*#define _KERNEL_*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/netfilter.h>
#include <linux/skbuff.h>
#include <linux/if_arp.h>
#include <linux/netfilter_arp.h>

unsigned int arp(unsigned int hooknum,
                     struct sk_buff *skb,
                     const struct net_device *in,
                     const struct net_device *out,
                     int (*okfn)(struct sk_buff *))
{       
        printk("<0>com\n");
        return NF_ACCEPT;
}
int init_module()
{

    nfho.hook = arp;         
    nfho.hooknum= NF_ARP_IN;
    nfho.pf       = NF_ARP;
    nfho.priority = NF_IP_PRI_FIRST;
    nf_register_hook(&nfho);
    return 0;
}

void cleanup_module()
{
    nf_unregister_hook(&nfho);
}
运行后不能捕获到任何的arp报文。希望大家多多指教,谢谢了。

C.J 发表于 2010-08-08 16:32

不知道到的话可以加 打印呀 ,报文途经的地方。

jhl19880722 发表于 2010-08-08 16:38

回复 2# C.J


   请问,怎样打印,我不是很清楚。我不知道在其他什么地方能够获得这个报文。谢谢啦

C.J 发表于 2010-08-08 18:06

最土最直接的就是 printk() 只要不PANIC。

1. 收到的点,网卡驱动
2. 到达net层,net core里面的处理函数(太久没看名字忘了),就是解析报文,判断类型,传递报文,都是点;
3. 还有就是调用你的这个 ARP_IN的HOOK点前面;

好像没了吧。

jhl19880722 发表于 2010-08-08 19:27

回复 4# C.J
谢谢了。我已经用其他的方法代替了。
但是,我还是有疑问,那就是在netfilter上面有前面两个位置的挂载点吗?还有就是,在NF_ARP的情况下,只有3个点,没有在IN前面的点啊。

liudeyi545 发表于 2014-12-30 17:03

你好,我也遇到了ARP hook方面的问题,但是迟迟不能解决,可以请您帮我分析一下原因吗?我的求助帖地址http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4165048&page=1&extra=#pid24340849谢谢了!!
页: [1]
查看完整版本: netfilter捕获arp报文,求解