(菜鸟飞飞)问一些sk_buff的问题.谢谢大牛。分数不多哈

1、在netfilter中写代码,sk_buff中存放的有数据链路层中的头部么?是不是跟在哪层写代码根本没有关系,sk_buff中存放的就是整个数据包的内容。就像用wireshark抓取到的一个包,是从ethernet到udp/tcp/icmp的一个完成的包,包括所有的包头,所有的data.对么??

2、ipv6_hdr(skb);tcp_hdr(skb);为什么使用前面的两个函数可以直接拿到ipv6和tcp的包头部分呢?是不是在这个函数内部对skb进行切割??比如在使用tcp_hdr(skb)的时候,是不是在tcp_hdr函数中去掉了tcp头部以前的内容和tcp头部以后的data,然后直接给了tcphdr了呢??

3、怎么样识别一个icmp的包,并且输出icmp包中的数据部分,该怎么写?我的机器的说skb里面没有nh什么的,所以不要用那个写好么?谢谢回答!

非常感谢您的回答!实在是没有分数了,问的还挺多,不好意思。谢谢!!!

作者: yihanJ   发布时间: 2011-05-20

从sk_buff的定义来看,它是包含了一个完整包的所有field(MAC, IP...)。所以ipv6_hdr, tcp_hdr能从sk_buff中获取对应的东西了,要识别一个ICMP包就得从iphdr的protocol来看了,如果是IPPROTO_ICMP那就是ICMP包了,至于你的ICMP问题,那要看你的代码是怎么写的了,可以先用icmp_hdr获取icmphdr

作者: bhdgx   发布时间: 2011-05-21