nfnetfilter_queue 模块的工作原理
来源:互联网 发布:java httpget下载文件 编辑:程序博客网 时间:2024/04/27 23:12
// ip包输入流(net/ipv4/ip_input.cz):
ip_rcv() -> HF_HOOK(NF_INET_PRE_ROUTING) -> ip_route_input -> NF_HOOK(NF_INET_LOCAL_IN) -> NF_HOOK_THRESH() -> nf_hook_thresh() ->nf_hook_slow() -> nf_queue() -> __nf_queue() -> [nf_queue_handler.outfn()] ->nfqnl_enqueue_packet() -> nfnetlink_unicast() & __enqueue_entry()**
// 注册nfnetlink_queue模块 (net/netfilter/netfilter_queue.c):
nfnetlink_queue_init() -> nfnetlink_subsys_register(nfnetlink_subsystem)
// nfnetlick消息接收 (net/netfilter/nfnetlink.c):
nfnetlink_rcv() -> netlink_rcv_skb() -> [nfnetlink_subsystem.cb()] ->nfqnl_recv_config() | nfqnl_recv_verdict() -> nf_register_queue_handler() | nf_reinject()**// iptable_filter表注册xt_table,将xt_table保存到每个net的net.xt.tables[af],并将net.ipv4.iptable_filter的值指向xt_table,net/ipv4/netfilter/iptable_filter.c:
iptable_filter_init() -> register_pernet_subsys() -> register_pernet_operations() ->pernet_operations.init(net) -> iptable_filter_net_init(net) ->ipt_register_table(net,xt_table, ipt_replace) ->xt_register_table(net, xt_table, ipt_replace) -> xt_register_table(net, xt_table, xt_table_info)
// iptable_filter注册HOOK,net/ipv4/netfilter/iptable_filter.c:
nf_register_hooks() -> ipt_local_out_hook()
// iptable_filter HOOK函数回调,net/ipv4/ip_tables.c:
ipt_do_table(net.ipv4.iptable_filter) ->ip_packet_match(iphdr)、IPT_MATCH_ITERATE(do_match(ipt_entry_match)) -> xt_match_param -> xt_match.match()、ipt_entry_target -> xt_target_param -> xt_target.target()
// match的注册,net/netfilter/xt_owner.c:
owner_mt_init() -> xt_register_matches() -> xt_register_match() -> xt[af].match
// 用户层iptc与内核层iptable的通信,内核层注册SOCK_RAW sockopt, net/ipv4/netfilter/ip_tables.c:
ip_tables_init() -> nf_register_sockopt() -> nf_sockopts添加struct nf_sockopt_ops
// 用户层iptc与内核层iptable的通信,内核调用过程, net/ipv4/raw.c
struct proto raw_prot.setsockopt -> raw_setsockopt(struct sock) -> ip_setsockopt(struct sock) ->nf_setsockopt(struct sock) -> nf_sockopt(struct sock) -> nf_sockopt_find
- nfnetfilter_queue 模块的工作原理
- 无线模块的工作原理
- Python模块的工作原理
- 1. Nginx的模块与工作原理
- Nginx的模块与工作原理
- Nginx的模块与工作原理
- 内核模块及工作原理
- Nginx模块工作原理概述
- VCS-3 VCS的模块机器工作原理
- Yii-srbac- 权限扩展模块工作原理
- MFRC522 IC卡模块工作原理
- Nginx HTTP处理模块工作原理
- vtk各个模块作用、数据流,工作原理
- ZooKeeper 核心模块工作原理分析
- 超声波模块工作原理分析及程序
- 非接触IC卡读写模块MFRC530的工作原理及其应用
- PAM-Linux可插拔认证模块(PAM)的配置文件、工作原理与流程
- Linux可插拔认证模块(PAM)的配置文件、工作原理与流程
- 电子钱包、电子现金与qPBOC
- java中对文件file的操作 新建文件 移动文件 复制文件 删除文件
- 在子框架内创建CBCGPDialogBar
- Spring中bean的scope详解
- 数据库中的书签——游标
- nfnetfilter_queue 模块的工作原理
- class_create(),class_device_create()或device_create()自动创建设备文件结点
- Servlet入门
- 20120613数据仓库架构
- luacom cygwin
- beanUtils工具包中的ConvertUtils.register方法
- 为MacPorts下载设置代理服务器
- Excel里的普通常用函数公式
- 20120620数据挖掘经验谈