当前位置: 技术问答>linux和unix
netfilter里如何获得TCP包的数据?
来源: 互联网 发布时间:2016-08-29
本文导语: netfilter里取得了IP包,经过判断里面封装了TCP数据,请问用什么方法能得到TCP包的数据部分? 我目前用的结构是sk_buff,能够获得tcp包头的指针; tcph = tcp_hdr(*skb); //获得TCP包头指针 unsigned char * datap = ...
netfilter里取得了IP包,经过判断里面封装了TCP数据,请问用什么方法能得到TCP包的数据部分?
我目前用的结构是sk_buff,能够获得tcp包头的指针;
tcph = tcp_hdr(*skb); //获得TCP包头指针
unsigned char * datap = (void*)tcph + tcp_hdr(skb)->doff * 4; //tcp头指针+tcp头长度应该是其数据部分了吧?
但是这样会报错。
dereferencing pointer to incomplete type
请指点一下,谢谢
我目前用的结构是sk_buff,能够获得tcp包头的指针;
tcph = tcp_hdr(*skb); //获得TCP包头指针
unsigned char * datap = (void*)tcph + tcp_hdr(skb)->doff * 4; //tcp头指针+tcp头长度应该是其数据部分了吧?
但是这样会报错。
dereferencing pointer to incomplete type
请指点一下,谢谢
|
你确信有tcp_hdr这样的宏或者函数?
另外,对void*指针作偏移会发生样的后果?unsigned char * datap = (unsigned char*)tcph + tcp_hdr(skb)->doff * 4;
另外,对void*指针作偏移会发生样的后果?unsigned char * datap = (unsigned char*)tcph + tcp_hdr(skb)->doff * 4;
|
先确定一下你的kernel的版本,2.4跟2.6的不一样