当前位置: 技术问答>linux和unix
传入一个sk_buff的结构,如何获取tcp的端口和其它数据
来源: 互联网 发布时间:2016-04-26
本文导语: 一个函数,传入一个sk_buff的结构,如:struct sk_buff **skb ,请问,如何从该结构中获得其协议类型?如果是TCP的包,如果获取端口号?如果TCP包承载的是http的协议报文,如何获取http的数据? 谢谢! ...
一个函数,传入一个sk_buff的结构,如:struct sk_buff **skb ,请问,如何从该结构中获得其协议类型?如果是TCP的包,如果获取端口号?如果TCP包承载的是http的协议报文,如何获取http的数据? 谢谢!
|
sk_buff你都填充好了,其它的就简单了! 看看sk_buff的结构吧。
TCP包端口号: skb->h->th->dest/source
至于你说的HTTP数据,那么需要熟悉协议,自己解析了,比如:
ip数据位于 skb->data + skb->nh.iph->ihl * 4 处;
udp数据位于skb->data + skb->nh.iph->ihl *4 +sizeof(struct udphdr)处;
tcp数据位于skb->data + skb->nh.iph->ihl*4 +sizeof(struct tcphdr)出;
至于http数据,下层协议一般是TCP,所以HTTP数据通常就是从skb->data + skb->nh.iph->ihl*4 +sizeof(struct tcphdr)开始...
大概意思就这样,自己结合内核和sk_buff看看吧。
good luck!
TCP包端口号: skb->h->th->dest/source
至于你说的HTTP数据,那么需要熟悉协议,自己解析了,比如:
ip数据位于 skb->data + skb->nh.iph->ihl * 4 处;
udp数据位于skb->data + skb->nh.iph->ihl *4 +sizeof(struct udphdr)处;
tcp数据位于skb->data + skb->nh.iph->ihl*4 +sizeof(struct tcphdr)出;
至于http数据,下层协议一般是TCP,所以HTTP数据通常就是从skb->data + skb->nh.iph->ihl*4 +sizeof(struct tcphdr)开始...
大概意思就这样,自己结合内核和sk_buff看看吧。
good luck!