- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux的netfilter框架设计
Netfilter简介
Linux2.4.x开始引入Netfilter子系统(以下简称NF),它作为一个通用的、抽象的框架,
提供一整套的 hook 函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协
议类型的连接跟踪成为了可能。内核在网络协议栈的关键点引入NF_HOOK 宏,从而搭建
起了整个 Netfilter 框架。
NF数据流向
对于收到的每个数据包,都从 “A”点进来,经过路由判决,如果是发送给本机的就经
过 “B”点,然后往协议栈的上层继续传递;否则,如果该数据包的目的地是不本机,那么
就经过 “C”点,然后顺着 “E”点将该包转发出去。
对于发送的每个数据包,首先也有一个路由判决,以确定该包是从哪个接口出去,然后
经过 “D”点,最后也是顺着 “E”点将该包发送出去。
协议栈那五个关键点 A,B,C,D 和 E 就是NF埋伏的地方。对应到NF框架,各称谓如
下图:
钩子函数调用流程
NF 中的不同钩子点调用了不同的钩子函数,其调用的流程框架如下图所示。图中所示箭头
为调用流程。
钩子函数的存储机制
钩子函数由一个全局二维链表数组 nf_hooks 保存,其按照协议族归类存储,在每个协
议族中,根据钩子点顺序排列,在钩子点内则根据钩子函数的优先级依次排列。钩子函数的
存储图如下图所示,链表中的每个节点都是一个 nf_hook_ops 结构,nf_hook_ops 实际存
储了钩子函数的内容,其结构如图所示。在相应的钩子点调用钩子函数时,则根据协议
族和钩子点找到相应的链表入口,然后依次调用该链中的每一个钩子函数对数据包进行操
作。
钩子函数的管理机制
如果需要在相应的钩子点挂载钩子函数,则需要首先定义一个 nf_hook_ops 结构,在其
中实现实际的钩子函数,再调用函数 nf_register_hook()将该钩子函数注册到上图所示的二维
链表中,nf_register_hook()函数的定义如下:
intnf_register_hook(structnf_hook_ops*reg)
{
structlist_head*i;
interr;
err=mutex_lock_interruptible(nf_hook_mutex);
if(err0)
returnerr;
list_for_each(i,nf_hooks[reg-pf][reg-hooknum]) {
if(reg-priority((structnf_hook_ops*)i)-priority)
break;
}
list_add_rcu(reg-list,i-prev);
mutex_unlock(nf_hook_mutex);
return0;
}
钩子函数返回值
在每个关键点上,有很多已经按照优先级预先注册了的回调函数(这些函数称为 “钩子
函数”)埋伏在这些关键点,形成了一条链。对于每个到来的数据包会依次被那些回调函数
“调戏”一番再视情况是将其放行,丢弃还是怎么滴。但是无论如何,这些回调函数最后必
须向 Netfilter 报告一下该数据包的死活情况, 因为毕竟每个数据包都是 Netfilter 从人家
协议栈那儿借调过来给兄弟们 Ha y 的,协议栈再怎么滴也总得 “活要见人,死要见尸”
吧。每个钩子函数最后必须向 Netfilter 框架返回下列几个值其中之一:
NF_ACCEPT 继续正常传输数据报。这个返回值告诉 Netfilter:到目前为止,该数据包
还是被接受的并且该数据包应当被递交到网络协议栈的下一个阶段。
NF_DROP 丢弃该数据报,不再传输,并且为这个数据包申请的所有资源都要得到释
放。
NF_STOLEN 接管数据报,告诉 Netfilter “忘掉”该数据报。也就是说钩子函数会在这
里对这个数据包进行完全处理。但是,这并不意味着该数据包的资源已经
被释放。这个数据包以及它独自的 sk_buff 数据结构仍然有效,只是回调
函数从 Netfilter 获取了该数据包的所有权。
NF_QUEUE 让这个数据包在用户空间排队(通常用于将数据报给用户空间的进程进
行处理)
NF_REPEAT 当用户改变了该数据包包头的某些信息时,那可以请求netfilter再次调
用这个钩子函数对它进行操作。应当谨慎使用这个值,以免造成死循环。
协议,hook点,ho
您可能关注的文档
- readontransform原理.pdf
- 国家正祀与民间信仰的互动_以明清京师的_顶_与东岳庙为个案.pdf
- 瞎忙族vs高效人士.pptx
- 九段hr进阶.pptx
- 2018年日历(含阴历).pdf
- 电商产品经理-进阶.docx
- 第1章 西方经济学概论 第1节.ppt
- 采购kpi.pdf
- 蔺氏启源文化【黄帝大传】之 五、小黄帝与女娃.pdf
- 6个阻碍产品开发的荒缪借口.pdf
- 上海市宝山区2025-2026学年第一学期期末考试高三英语试卷(含答案).pdf
- 云南省普洱市镇沅县第一中学2025-2026学年高二上学期期中考试语文试题(含答案).pdf
- 天津市扶轮中学2025-2026学年高一上学期第一次月考英语试题(含答案).pdf
- 上海市杨浦区2026届高三一模英语试题(含答案).pdf
- 湖北省八校联考2025-2026学年高二上学期月考语文试题(含答案).pdf
- 山西省介休市第一中学校2025-2026学年高二上学期期中考试英语试卷(含答案,无听力原文及音频).pdf
- 江苏省无锡市梅村高级中学2025-2026学年高二上学期期中英语试题(含答案).pdf
- 山东省临沂市临沭县2025-2026学年九年级(上)期中化学试卷(含答案).pdf
- 山东省菏泽市2025-2026学年高二上学期期中考试英语(B)试卷(含答案,无听力原文及音频).pdf
- IPO审核耗时与首发股票市场表现.pdf
最近下载
- 精品课件-《菩萨蛮·书江西造口壁》(优质课课件用).ppt VIP
- 应用高等数学(第2版)练习册胡桐春课后习题答案解析.docx VIP
- 2025年连云港专业技术人员公共课程公需考试-学习贯彻党的二十届三中全会精神.docx VIP
- 标准作业流程心得体会范文.docx VIP
- DBJT 61-38-2016 建筑给水排水与采暖工程施工工艺标准.docx VIP
- 尿液干化学法检测尿液红细胞与白细胞假阴性结果分析.doc VIP
- 皖南医学院《马克思主义基本原理》2016-2017学年期末考试卷.pdf VIP
- 2023年四川省气象部门事业单位招聘考试真题.docx VIP
- 简约手绘工作概述商务汇报通用PPT模板.pdf VIP
- 2023年四川省气象部门事业单位招聘考试真题.docx VIP
原创力文档


文档评论(0)