2.6.18内核ip_hdr的问题
今天在centos的虚拟机下尝试以前写的内核程序《2.6内核netfilter包截获》,insmod 时竟然出错。insmod: error inserting simpFilter.ko: -1 Unknown symbol in module于是查看日志: tail /var/log/messages ,有一下字样:Sep 9 16:06:37
今天在centos的虚拟机下尝试以前写的内核程序《2.6内核netfilter包截获 》,insmod 时竟然出错。
insmod: error inserting 'simpFilter.ko': -1 Unknown symbol in module
于是查看日志: tail /var/log/messages ,有一下字样:
Sep 9 16:06:37 vm04 kernel: simpFilter: Unknown symbol ip_hdr
在http://lxr.linux.no/上查找:“ip_hdr”,结果如下:
Code search: ip_hdr
Function include/linux/ip.h, line 110 [usage... ]
明明有嘛,再在虚拟机下查找: /usr/src/linux/include/linux/ip.h中,并不存在函数ip_hdr的定义。奇怪了,虚拟机的内核版本是2.6的啊!
再细看,原来虚拟机的版本是
2.6.18-128.el5xen
而刚才在http://lxr.linux.no/查找用的内核版本是2.6.30.6。再把各个版本都查了一下,发现这个函数是从2.6.22 版本才有的。
那么,在《2.6内核netfilter包截获 》中的描述:
2.6版内核的网络协议栈较2.4版有所改变,比如sk_buff结构中去掉了nh联合体的定义。在2.6内核中我们如果要得到ip数据包的源节点地址, 需要使用const struct iphdr *iph = ip_hdr(skb); ip_hdr 的定义在linux/ip.h中定义。下面通过一个简单的例子介绍在2.6内核中如何在netfilter上挂载hook函数实现数据包的过滤。
就不是太准确了!
下面准备更新内核版本了2.6.30 ,哈哈!
更多推荐
所有评论(0)