免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4397 | 回复: 4
打印 上一主题 下一主题

[C] 关于通过sk_buff获取网络数据包头的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-19 14:00 |只看该作者 |倒序浏览
struct sk_buff *sb               
根据下图可以得出通过
struct tcphdr *tcph = (struct tcphdr*)(sb->h.th);
可以得出tcp包头,但是实际上得不到,反而通过下面的办法可以得到
struct tcphdr *tcph = (struct tcphdr*)(sb->data+(sb->nh.iph->ihl*4));
可问题该方法的链路层包头怎么没有计算呢?
按说一个数据包应该是
链路包头14字节
然后是ip包头
tcp包头(假设数据包是tcp的)
可是
struct tcphdr *tcph = (struct tcphdr*)(sb->data+(sb->nh.iph->ihl*4));
这个办法是没有链路层包头的啊?
请问是怎么回事?

skbuff.png (5.29 KB, 下载次数: 13)

skbuff.png

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2010-03-19 14:15 |只看该作者
因为钩子调用的时机不同。
NF_IP_LOCAL_IN 时还没有填充传输层的头

论坛徽章:
0
3 [报告]
发表于 2010-03-19 14:17 |只看该作者
谢谢flw。

论坛徽章:
0
4 [报告]
发表于 2010-03-19 14:17 |只看该作者
Godbach 大侠给的答复是:
不用加MAC len。你之所以没有理解正确,还是我说的那个问题。skb中有些成员是会随着skb在不同的协议层而变化的,比如skb->data就是这样的成员。
因此,建议LZ看一下分析sk_buff数据结构的文章,充分的理解这个结构体中若干关键成员的含义。

论坛徽章:
0
5 [报告]
发表于 2010-03-19 14:26 |只看该作者
data指向ip头部,你要mac头部,需要把指针往前移一下,比如14个字节..
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP