没有合适的资源?快使用搜索试试~ 我知道了~
首页linux netfilter iptables 源码分析
资源详情
资源评论
资源推荐
Linux netlter 源码分析
内容基本上来自两篇文章
《 源码分析》—(独孤九贱 )
《 实现机制和扩展技术》——(杨沙洲 国防科技大学计算机学院)
一、 IP 报文的接收到 hook 函数的调用
1.1 ip_input.c ip_rcv()函数
以接收到的报文为例,类似的还有 和
!" #"#"#
"
$
%%%"&%%定义一个 报文的数据报头
%%%'(&
%%% )*++,-./01213043251
%%%%%%&数据包不是发给我们的
%%%6,6.51-15736,51-15867640.06905&收到数据包统计量加 :
%%% + #;<,-1286.++=
%%$
"如果数据报是共享的,则复制一个出来,此时复制而出的已经和 脱离了关系 "
%%%%%6,6.51-15736,51-158676>65.-4>5&
%%%%%&
%%?
%%@ A #B
%%%%&对数据报的头长度进行检查,
%
%%+ )*&取得数据报的头部位置
%)*CDEE)*@+F版本号或者头长度不对,
%%%&头长度是以 F 字节为单位的,所以 D 表示的是 (G 字节
%@ A #)*"F
%%%&
%
%AH"#)*
%%%%&检查报文的检验和字段
%+)*&
% )*CEEC)*"F
%%%&整个报文长度不可能比报头长度小
% AA #
%$对数据报进行裁减,这样可以分片发送过来的数据报不会有重复数据
%%6,6.51-15736,51-158676>65.-4>5&
%%&
%?
%%<322/,<601#<6,,4042=16;# ##=#
%%%%%%%%&通过回调函数调用
%6,6.51-15736,51-1586763>4044245&
%%%%%%% &丢掉数据报
%%%%%%%014I>42,&
?
1.2 include/linux/netlter.h NF_HOOK 宏
J.2<6;01<6104>07=;
J<322/## ### K
## ####6186
J<322/134053
J
J<322/## ### K
ALMNMN K
O K
## ####6186
J<322/134053## #### K
ALMNMN K
O K
## ####
J
"如果 M,<601NM<6,<24P-4>N所指向的链表为空(即该钩子上没有
挂处理函数),则直接调用 ;否则,则调用
转入 的处理。 "
1.3 net/core/netlter.c nf_kook_slow()函数
## !"" #
%%%%%%%%%%"#
%%%%%%%%%%"#
%%%%%%%%%%" !"#
%%%%%%%%%%
$
%%%%"A&
%%%%&
%%%%+G&
%%%%&
%%%%"取得对应的链表首部"
%%%%A+LMNMN&
%%%%"调用对应的钩子函数"
%%%%+LMNMN# ###
%%%%%%%%%%%%%%%%#LA##&
%%%%"判断返回值,做相应的处理"
++<-..0,1EE++<512,$
%%%%%+:&%"前面提到过,返回 :,则表示装继续调用 函数指针"
%%%%%&
%%?++<>42,$
%%%% " &%%%%%%%%"删除数据包,需要释放 "
%%%%%+)0,048&
%%?++<Q=0=0$
%%%%%<>07=;R9+Q=0=0KR&
%%%%%@S" #A#####
%%%%%%%%&
%%%?
%%%%&
%%%%&
?
1.4 net/core/netlter.c nf_iterate()函数
"#
!"" #
#
"#
"#
""#
" !"#
$
"
"1A
" AA
"
"依次调用指定 点下的所有 )*"函数,这些 里
有 表注册的,有 A 表注册的,等等。
函数是一个 循环的宏,当调用结点中的 函数后,
根据返回值进行相应处理。如果 函数的返回值是
<Q=0=0#<5120#<>42, 时,函数返回该值;如果返回值是 <40,0-1 时,
则跳到前一个结点继续处理;如果是其他值,由下一个结点继续处理。如果整条链表处理
完毕,返回值不是上面四个值,则返回 <-..0,1。"
"#$
"A+""&
*A)*
&
A)*# ###$
<Q=0=0
<Q=0=0&
<5120
<5120&
<>42,
<>42,&
<40,0-1
"+")*&
&
?
?
<-..0,1&
?
二、ipt_table 数据结构和表的初始化
2.1 include/linux/netlter_ipv4/ip_tables.h struct ipt_table 表结构
$
&
"表链 "
AM6,11-708-I-800N&
"表名,如RR、RR等,为了满足自动模块加载的设计,包含该表的模块应命名为
TAT"
" &
"表模子,初始为 "
&
"位向量,标示本表所影响的 322/"
&
"读写锁,初始为打开状态 "
"&
" 的数据区,见下 "
A"A&
"是否在模块中定义 "
?&
2.2 struct ipt_table_info 是实际描述表的数据结构 ip_tables.c
$
B&
"表大小 "
A &
"表中的规则数 "
&
"初始的规则数,用于模块计数 "
M<6,=8322/5N&
"记录所影响的 322/ 的规则入口相对于下面的 变量的偏移量 "
UM<6,=8322/5N&
"与 相对应的规则表上限偏移量,当无规则录入时,相应的 和
U 均为 G"
MGN&
"规则表入口 "
?&
2.3 include/linux/netlter_ipv4 规则用 struct ipt_entry 结构表示,包含匹
配用的 IP 头部分、一个 Target 和 0 个或多个 Match。由于 Match 数不定,所以一条
规则实际的占用空间是可变的。结构定义如下
$
&
"所要匹配的报文的 6, 头信息 "
&
剩余38页未读,继续阅读
woshibutian
- 粉丝: 2
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2