2.6.18内核ip_hdr的问题

本文记录了在CentOS虚拟机下使用2.6内核时遇到的未知符号ip_hdr错误,并详细解释了解决过程。作者发现该符号在特定版本的内核中并不存在,最终通过升级内核版本解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

今天在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 ,哈哈!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值