netfilter,协议号的问题,附源代码!!!!!!

基督山大树 2014-08-04 06:59:39

static unsigned int hook_fn(unsigned int hooknum,
struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *))
{
if(!skb){
printk(KERN_ALERT"SKB IS NULL\n");
return NF_ACCEPT;
}

spin_lock_irq(&g_lock);
if(skb->protocol==htons(ETH_P_IP))
{
printk(KERN_ALERT"hooknum=%i\n",hooknum);


}
else{
printk(KERN_ALERT"hooknum=%i;protocol=%x[%x];len=%u\n",hooknum,ntohs(skb->protocol),skb->protocol,skb->len);
}
return NF_ACCEPT;
};
struct nf_hook_ops hook_ops[]=
{
{
.hook=hook_fn,
.owner=THIS_MODULE,
.pf=PF_BRIDGE,
.hooknum=NF_IP_PRE_ROUTING,
.priority=NF_IP_PRI_FIRST,
},
{
.hook=hook_fn,
.owner=THIS_MODULE,
.pf=PF_INET,
.hooknum=NF_IP_LOCAL_IN,
.priority=NF_IP_PRI_FIRST+1,
},
{
.hook=hook_fn,
.owner=THIS_MODULE,
.pf=PF_INET,
.hooknum=NF_IP_FORWARD,
.priority=NF_IP_PRI_FIRST+2,
},{
.hook=hook_fn,
.owner=THIS_MODULE,
.pf=PF_INET,
.hooknum=NF_IP_LOCAL_OUT,
.priority=NF_IP_PRI_FIRST+3,
},
{
.hook=hook_fn,
.owner=THIS_MODULE,
.pf=PF_INET,
.hooknum=NF_IP_POST_ROUTING,
.priority=NF_IP_PRI_FIRST+4,
},


};
static __init int net_filter_init(void){
printk(KERN_ALERT"init\n");
spin_lock_init(&g_lock);
return nf_register_hooks((struct nf_hook_ops*)&hook_ops,NF_IP_NUMHOOKS);
}
static __exit void net_filter_exit(void){
nf_unregister_hooks((struct nf_hook_ops*)&hook_ops,NF_IP_NUMHOOKS);
printk(KERN_ALERT"exit\n");
}
module_init(net_filter_init);
module_exit(net_filter_exit);


以上为代码,简简单单几行,可运行的时候不管怎么样skb->protocol==htons(ETH_P_IP)都不为真,也就是无法获得IP包,打印的协议号总是奇奇怪怪的,如下所示:
hooknum=3;protocol=0[0];len=3360257716
hooknum=4;protocol=5fc0[c05f];len=0
hooknum=3;protocol=0[0];len=3360257716
hooknum=1;protocol=7c9[c907];len=3434676224
hooknum=4;protocol=5fc0[c05f];len=0
请问怎么样才能获取IP包,谢谢各位了!
...全文
67 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
Java Agent是Arthas使用的技术,是Skywalking使用的技术,是一份十分重要的技术。 课程的稀缺性在此之前,市面上并没有针对Java Agent进行系统介绍的课程。 通过搜索引擎查找,会发现与Java Agent相关的内容大多是个人知识总结分享的内容。这些内容有如下特点:内容质量不一详略程度不一学习难度千差万别总体上来说,学习者很难有一个整体认知、系统学习的过程。 课程的设计目标 在构思课程内容时,本课程带有以下目标:课程学习梯度:从简单到复杂,让学习者有一个循序渐进的理解过程。构造完整、统一的知识体系:不是零散的知识点堆砌,而是有一个统一的贯穿始终的知识框架。具有可操作性的代码示例,不只是讲概念,更注意于实践。课程内容安排 本课程通过四章内容对Java Agent相关知识进行讲解:第一章,介绍Agent Jar的三个组成部分:Manifest、Agent Class和ClassFileTransformer。第二章,介绍Agent Jar的两种启动方式:从命令行启动和使用Attach机制启动。第三章,介绍如何利用Instrumentation API来实现Agent Jar的功能。第四章,Java Agent的应用与技巧。 通过本课程的学习,让同学们更好地建立起一个完整的知识体系:  讲师介绍我叫刘森,南京师范大学研究生毕业,2015年获得信息系统项目管理师(高级),2014年获得系统集成项目管理工程师(中级)。 目前,我的课程都是围绕着“Java字节码”技术展开: 《Java Agent基础篇》是在一个运行JVM当中提供修改字节码的机会《Java ASM系列》(免费课程)是一个操作字节码的类库《Java 8 ClassFile》专注于字节码的理论知识,入选为“51CTO数字化人才证书项目认证课程” 因此,我对字节码技术有较为深入的研究和理解,大家想学习字节码的技术可以找我:字节码技术找刘森,轻松学习又省心~~~ 

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧