文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档> 关于通过sk_buff获取数据包头的问题

关于通过sk_buff获取数据包头的问题

时间:2010-03-19  来源:rain_fish

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));
这个办法是没有链路层包头的啊?
请问是怎么回事?


Godbach:

你需要了解那几个union中的指针分别在什么时候才有效。

你说的情况就是union中的指针还不是有个有效指针。

rain_fish:
    哦,明白了,还有个问题就是
struct tcphdr *tcph = (struct tcphdr*)(sb->data+(sb->nh.iph->ihl*4));
是不是应该是struct tcphdr *tcph = (struct tcphdr*)(sb->data+14(链路层包头)+(sb->nh.iph->ihl*4));
?

Godbach :
不用加MAC len。你之所以没有理解正确,还是我说的那个问题。skb中有些成员是会随着skb在不同的协议层而变化的,比如skb->data就是这样的成 员。
因此,建议LZ看一下分析sk_buff数据结构的文章,充分的理解这个结构体中若干关键成员的含义。


相关阅读 更多 +
排行榜 更多 +
弓箭手战士酷跑

弓箭手战士酷跑

飞行射击 下载
三角洲行动全面战场攀升A点进攻指南

三角洲行动全面战场攀升A点进攻指南

飞行射击 下载
僵尸射手世界大战

僵尸射手世界大战

飞行射击 下载