免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ubuntuer

教你修改以及重构skb [复制链接]

论坛徽章:
0
发表于 2010-04-06 12:48 |显示全部楼层
本帖最后由 ipiszhang 于 2010-04-06 20:21 编辑

仔细读过 提两个问题

第一
“可以看到对于挂载在out上的数据包mac已经被剥掉”

out上的数据包来自上层的应用程序进程 根本没有到达数据链路层 不是mac头“被剥掉” 而应该是根本还没有mac头 “剥掉”只能是出现在数据包从下层到上层传输的情况中

第二
20100110_74e16129b4d28ffe6e4cy1k171ak0j0d.jpg

第一个TCP数据包 (No.5) TCP一层的解析结果是高亮的 是不是说明数据包本身有问题?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-06-09 09:12 |显示全部楼层
请问第一个例子里边为什么没有经过NF_IP_POST_ROUTING?
谢谢

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-06-09 09:45 |显示全部楼层
好文章,非常感谢兄弟的分享

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-06-17 11:46 |显示全部楼层
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-06-17 11:48 |显示全部楼层
按照作者的第一个例子在 2.6.29上运行,改正了一些编译错误,现在的问题是:ping 的时候,用dmesg查看,结果
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
*skb is NULL
调用了钩子函数,但却说*skb is NULL,请问是什么问题?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-06-17 12:21 |显示全部楼层
问题已解决,2.6.29下,钩子函数的第二个参数是struct sk_buff* skb,而非struct sk_buff** skb

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-06-17 13:39 |显示全部楼层
请问第一个例子中 为什么“NF_IP_LOCAL_OUT”时"mac is NULL"?

论坛徽章:
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
发表于 2010-06-17 13:58 |显示全部楼层
想一下构造包的过程你就明白了。本地发出的包,先构造那一层数据呢。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-06-17 17:09 |显示全部楼层
回复 38# Godbach


    发现有一个缺陷,向外发送的包,无论是在NF_INET_LOCAL_OUT这个点还是在NF_INET_POST_ROUTING这个点,其实都还没有得到mac地址,那假如我们想手动修改发送出去的数据包的mac地址,该怎么做呢?
    貌似这就不能用钩子机制来实现了把,是不是只能自己重构数据包,然后使用dev_queue_xmit发送出去?

论坛徽章:
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
发表于 2010-06-18 14:08 |显示全部楼层
    发现有一个缺陷,向外发送的包,无论是在NF_INET_LOCAL_OUT这个点还是在NF_INET_POST_ROUTING这个点,其实都还没有得到mac地址,那假如我们想手动修改发送出去的数据包的mac地址,该怎么做呢?
    貌似这就不能用钩子机制来实现了把,是不是只能自己重构数据包,然后使用dev_queue_xmit发送出去?

建议你了解一下数据包从本机发出的流程,以及各个协议出对数据包做了哪些处理,添加了那些内容。
这样你就可以明白在哪些情况下,mac头是有的,哪些情况下mac头是没有的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP