当前位置: 技术问答>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!
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。