免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: morfast
打印 上一主题 下一主题

在链路层修改包并送回协议栈 [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
11 [报告]
发表于 2011-05-05 22:13 |只看该作者
对,LZ 可以试试 LS 的 etable

论坛徽章:
0
12 [报告]
发表于 2011-05-05 22:24 |只看该作者
本帖最后由 morfast 于 2011-05-05 22:28 编辑

试了下NF hook, 按照这篇文章http://bbs.chinaunix.net/thread-2177913-1-1.html写的

但在hook function里多写几句,比如调用skb_copy一下什么的,insmod后就kernel panic死机了。如果只是返回一个NF_ACCEPT或是NF_DROP,就没问题

看不出代码里有什么问题,还是有其它原因?

代码如下:
  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. #include <linux/netfilter_ipv4.h>
  4. #include <linux/if_ether.h>
  5. #include <linux/ip.h>

  6. MODULE_LICENSE("Dual BSD/GPL");

  7. /* This is the structure we shall use to register our function */

  8. static struct nf_hook_ops nfho;

  9. /* This is the hook function itself */

  10. static unsigned int hook_func(unsigned int hooknum,
  11. struct sk_buff **skb,
  12. const struct net_device *in,
  13. const struct net_device *out,
  14. int (*okfn)(struct sk_buff *))
  15. {
  16.     //如果没有下面这两行,则不会发生kernel panic
  17.     struct sk_buff *sb;
  18.     sb = skb_copy(*skb, GFP_ATOMIC);

  19.     return NF_DROP;
  20. }

  21. /* Initialisation routine */
  22. static int init_dropall(void)
  23. {
  24.     /* Fill in our hook structure */
  25.     nfho.hook = (nf_hookfn *)hook_func;
  26.     nfho.hooknum  = NF_INET_PRE_ROUTING;
  27.     nfho.pf       = PF_INET;
  28.     nfho.priority = NF_IP_PRI_FIRST;
  29.     nf_register_hook(&nfho);
  30.     return 0;
  31. }

  32. /* Cleanup routine */
  33. static void exit_dropall(void)
  34. {
  35.     nf_unregister_hook(&nfho);
  36. }

  37. module_init(init_dropall);
  38. module_exit(exit_dropall);
复制代码

论坛徽章:
0
13 [报告]
发表于 2011-05-05 22:27 |只看该作者
etable我看了下,好像不能修改MAC的协议字段啊

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
14 [报告]
发表于 2011-05-06 00:11 |只看该作者
你不就修改 MAC 吗,直接改好了,为什么用 skb_copy

论坛徽章:
0
15 [报告]
发表于 2011-05-06 09:07 |只看该作者
回复 14# Godbach


    对,但是,现在的问题是,在hook函数里只要多写几行,不管是调skb_copy还是直接改skb的某个成员,还是别的什么操作,insmod时就kernel panic了。我自己找不出问题在哪。用的内核是官方2.6.38。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
16 [报告]
发表于 2011-05-06 09:52 |只看该作者
static unsigned int hook_func(unsigned int hooknum,
struct sk_buff **skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *))


看一下红色哪一行。这个就是开发 NF 代码很容易犯的错误。

论坛徽章:
0
17 [报告]
发表于 2011-05-06 13:02 |只看该作者
回复 16# Godbach


    不太明白,第一次接触NF程序,网上找到的一些代码也是这样写的。版主可否说得再具体一些? 谢谢!

论坛徽章:
0
18 [报告]
发表于 2011-05-06 13:07 |只看该作者
回复 16# Godbach


    好像明白了,看了一下netfilter.h里的定义,应该是一级指针而不是二级,是吗?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
19 [报告]
发表于 2011-05-06 14:12 |只看该作者
对头。

很多初学 NF 的朋友容易出现的一个问题,拿着网上找到的 NF 示例代码,在一个新的内核上运行,就读了一个内存或者稍微修改一个小东东,系统就 panic 了。

其中一个可能的原因就是 NF Hook 的接口发生变化了.

论坛徽章:
0
20 [报告]
发表于 2011-05-06 17:05 |只看该作者
回复 19# Godbach


    嗯,试了下,这回行了。谢谢!

    再问个问题,在hook里修改过的包在wireshark里好像看不到啊。wireshark是在数据包处理的那个点上截取包的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP