+ -
当前位置:首页 → 问答吧 → 检测广播包的问题

检测广播包的问题

时间:2010-10-15

来源:互联网

本帖最后由 destinywangyh 于 2010-10-15 11:37 编辑
  1. #include <linux/module.h>
  2. #include <linux/kernel.h>
  3. #include <linux/skbuff.h>
  4. #include <linux/ip.h>
  5. #include <linux/netfilter.h>
  6. #include <linux/netfilter_ipv4.h>
  7. #include <linux/if_ether.h>
  8. #include <linux/tcp.h>
  9. #include <linux/moduleparam.h>
  10. #include <linux/inet.h>
  11. #include <linux/etherdevice.h>
  12. #include <net/sock.h>
  13. #include <net/tcp.h>
  14. #include <net/udp.h>
  15. #include <net/netfilter/nf_nat.h>
  16. #include <net/netfilter/nf_nat_helper.h>
  17. #include <net/netfilter/nf_nat_rule.h>
  18. #include <net/netfilter/nf_conntrack.h>
  19. #include <net/netfilter/nf_conntrack_helper.h>
  20. #include <net/netfilter/nf_conntrack_expect.h>

  21. static struct nf_hook_ops nfhoo;

  22. unsigned int hook_funco(unsigned int hooknum,
  23.                        struct sk_buff *skb,
  24.                        const struct net_device *in,
  25.                        const struct net_device *out,
  26.                        int (*okfn)(struct sk_buff *))
  27. {
  28.         skb_linearize(skb);
  29.         unsigned char *dest = eth_hdr(skb)->h_dest;
  30.         if(dest[0]==0xff)
  31.                 return NF_QUEUE;
  32.         else
  33.                 return NF_ACCEPT;
  34. }

  35. int init_module()
  36. {
  37.        nfhoo.hook      = hook_funco;
  38.        nfhoo.hooknum   = NF_INET_POST_ROUTING;
  39.        nfhoo.pf        = PF_INET;
  40.        nfhoo.priority  = NF_IP_PRI_MANGLE;
  41.        nfhoo.owner     = THIS_MODULE;
  42.   
  43.        nf_register_hook(&nfhoo);

  44.        return 0;
  45. }

  46. void cleanup_module()
  47. {
  48.     nf_unregister_hook(&nfhoo);
  49. }
复制代码
想用上面的代码把MAC目的地址是FF开头的包QUEUE下来,但加载模块后不但QUEUE不到广播包,连其他正常的出站通信都无法进行.

最奇怪的是如果我把第32行改成"if(dest[0]!=0xff)",就是反过来,只QUEUE正常的包,还是无法QUEUE到任何东西,广播包尽管RETURN NF_ACCEPT了,还是发不出去.实在想不明白,按理说HOOK到数据包之后要么QUEUE起来要么ACCEPT,怎么会直接不能通信呢?麻烦指教一下,谢谢!

作者: destinywangyh   发布时间: 2010-10-15



QUOTE:
#        nfhoo.hook      = hook_funco;
#        nfhoo.hooknum   = NF_INET_POST_ROUTING;
#        nfhoo.pf        = PF_INET;
#        nfhoo.priority  = NF_IP_PRI_MANGLE;
#        nfhoo.owner     = THIS_MODULE;


不建议你自己写的hook ,使用已定义的优先级别,自己定义一个吧。

另外,如果检测的是进来的而广播包, 可以考虑在 PREROUTING 处抓包

作者: Godbach   发布时间: 2010-10-15

用户态是否有接收 QUEUE 包的程序?

作者: Godbach   发布时间: 2010-10-15