钩子函数

Linux Netfilter挂载钩子发送简单的UDP报文

匿名 (未验证) 提交于 2019-12-02 21:53:52
1、思路 分配空间--->填充udp、ip、ethernet报文头以及发送数据--->发送构造完成的报文 2、需要明白的接口 alloc_skb 分配skb空间 skb_reserve 在skb头部预留(将数据指针与skb尾指针后移) skb_push 向前移动数据头指针(skb_reserve为这个操作预留空间) skb_reset_transport_header 重置传输层报文头指针(存在偏移与不偏移两种方式) skb_set_transport_header 重置并设置传输层报文头指针 skb_reset_network_header 重置ip层报文头指针 skb_reset_mac_header 重置链路层报文头指针 3、udp发送报文接口实现 #define ICMP 1 #define ETH "eth0" #define S_PORT 9988 #define D_PORT 8899 u_long S_IP = 0xC0A8034D ; // "192.168.3.77" u_long D_IP = 0xC0A80305 ; // "192.168.3.5" unsigned char S_MAC[ETH_ALEN]={ 0x00 , 0x0c , 0x29 , 0x41 , 0x3e , 0x66 }; /* 本地mac地址 */ unsigned char D

webpack4.0各个击破(7)―― plugin篇

匿名 (未验证) 提交于 2019-12-02 21:53:52
webpack 作为前端最火的构建工具,是前端自动化工具链 最重要的部分 ,使用门槛较高。本系列是笔者自己的学习记录,比较基础,希望通过 问题 + 解决方式 的模式,以前端构建中遇到的具体需求为出发点,学习 webpack 工具中相应的处理办法。(本篇中的参数配置及使用方式均基于 webpack4.0版本 ) plugin 机制是 webpack 中另一个核心概念,它基于事件流框架 tapable ,你可以参考浏览器环境中的 【DOM事件模型】 , 【SPA模型中的生命周期钩子】 或是node环境中的 【EventEmitter模块】 来理解其作用。 plugin 系统提供给开发者监听 webpack 生命周期并在特定事件触发时执行指定操作的能力。 当然,要写一个真正能实现一定功能的插件,你还需要了解 Compiler 和 Compilation 这两个概念,网上可以找到非常多相关的文章( 《webpack-docs/plugin》 )。 1.2 Compiler 从表现上看, Compiler 暴露了和 webpack 整个生命周期相关的钩子,通过如下的方式访问: //基本写法 compiler.hooks.someHook.tap(...) //如果希望在entry配置完毕后执行某个功能 compiler.hooks.entryOption.tap(...) /

Netfilter 之 钩子函数调用

旧巷老猫 提交于 2019-12-02 16:47:45
本篇主要从三层协议栈调用函数NF_HOOK说起,不断深入,分析某个钩子点中所有钩子函数的调用流程,但是本文不包含规则介绍和核心的规则匹配流程,后续文章将继续分析; NF_HOOK函数先调用了nf_hook继续执行调用钩子函数处理,处理之后,如果接受,则调用输入的回调函数okfn,继续数据包的下一步处理; 1 static inline int 2 NF_HOOK(uint8_t pf, unsigned int hook, struct net *net, struct sock *sk, struct sk_buff *skb, 3 struct net_device *in, struct net_device *out, 4 int (*okfn)(struct net *, struct sock *, struct sk_buff *)) 5 { 6 /* 先执行钩子函数 */ 7 int ret = nf_hook(pf, hook, net, sk, skb, in, out, okfn); 8 9 /* 返回成功,则继续执行成功回调 */ 10 if (ret == 1) 11 ret = okfn(net, sk, skb); 12 return ret; 13 } NF_HOOK_COND增加了一个输入掉价cond,当不满足条件的时候,直接调用okfn

Netfilter 之 五个钩子点

别等时光非礼了梦想. 提交于 2019-12-02 16:46:51
概述 在协议栈的三层IPv4(IPv6还没看,不清楚)数据包的处理过程中,可能经过Netfilter的五个钩子点,分别为NF_INET_PRE_ROUTING、NF_INET_LOCAL_IN、NF_INET_FORWARD、NF_INET_LOCAL_OUT、NF_INET_POST_ROUTING,在每个点都可以设置一些规则,来对数据包进行匹配检查处理,这些规则的配置、布局和匹配流程,后续文章会详细介绍,本篇主要介绍这五个钩子点以及所处的上下文调用关系; 五个钩子点的位置如下图所示; 代码分析 NF_INET_PRE_ROUTING 当二层收包结束后,会根据注册的协议和回调函数分发数据包,其中ipv4的数据包会分发到ip_rcv函数进行三层协议栈处理,该函数对数据包的合法性进行检查,并且设置一些必要字段之后,经过PRE_ROUTING钩子点; 1 int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev) 2 { 3 /* IP数据报的合法性检查和一些必要字段设置,此处省略 */ 4 5 /* 经过PRE_ROUTING钩子点 */ 6 return NF_HOOK(NFPROTO_IPV4, NF_INET_PRE

Netfilter 之 钩子函数注册

只谈情不闲聊 提交于 2019-12-02 16:46:32
通过注册流程代码的分析,能够明确钩子函数的注册流程,理解存储钩子函数的数据结构,如下图(点击图片可查看原图); 废话不多说,开始分析; nf_hook_ops是注册的钩子函数的核心结构,字段含义如下所示,一般待注册的钩子函数会组成一个nf_hook_ops数组,在注册过程中调用nf_register_net_hooks将所有规则加入到指定的钩子点; 1 struct nf_hook_ops { 2 struct list_head list; 3 4 /* User fills in from here down. */ 5 nf_hookfn *hook; /* 钩子函数 */ 6 struct net_device *dev; /* 设备 */ 7 void *priv; /* 私有数据 */ 8 u_int8_t pf; /* 协议族 */ 9 unsigned int hooknum; /* 钩子点 */ 10 /* Hooks are ordered in ascending priority. */ 11 int priority; /* 优先级 */ 12 }; 钩子函数nf_hookfn的原型为: 1 typedef unsigned int nf_hookfn(void *priv, 2 struct sk_buff *skb, 3 const struct nf

pod hook 钩子函数 生命周期 lifecycle/postStart/preStop

柔情痞子 提交于 2019-12-02 16:27:26
hook 钩子函数 生命周期 lifecycle/postStart/preStop hook-demo1.yaml lifecycle/postStart --- apiVersion: v1 kind: Pod metadata: name: hook-demo1 labels: app: hook spec: containers: - name: hook-demo1 image: nginx ports: - name: webport containerPort: 80 lifecycle: postStart: exec: command: ["/bin/sh","-c","echo Hello from the postStart Handler > /usr/share/message"] hook-demo2.yaml lifecycle/preStop --- apiVersion: v1 kind: Pod metadata: name: hook-demo2 labels: app: hook spec: containers: - name: hook-demo2 image: nginx ports: - name: webport containerPort: 80 volumeMounts: - name: message mountPath:

Vue.js面试题整理(转载)

蓝咒 提交于 2019-12-02 16:12:07
一、什么是MVVM? MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI 展现出来,ViewModel 是一个同步View 和Model的对象(桥梁)。 在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。 ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。 二、mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合? mvc和mvvm其实区别并不大。都是一种设计思想。主要就是mvc中Controller演变成mvvm中的viewModel。mvvm主要解决了mvc中大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。 区别:vue数据驱动

第三方日志库logrus使用

痴心易碎 提交于 2019-12-02 14:40:07
摘自: https://www.cnblogs.com/Dr-wei/p/11742394.html 第三方日志库logrus使用 日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发。本文介绍了 logrus 这个日志库的基本使用。 logrus介绍 Logrus是Go(golang)的结构化logger,与标准库logger完全API兼容。 它有以下特点: 完全兼容标准日志库,拥有七种日志级别: Trace , Debug , Info , Warning , Error , Fatal and Panic 。 可扩展的Hook机制,允许使用者通过Hook的方式将日志分发到任意地方,如本地文件系统,logstash,elasticsearch或者mq等,或者通过Hook定义日志内容和格式等 可选的日志输出格式,内置了两种日志格式JSONFormater和TextFormatter,还可以自定义日志格式 Field机制,通过Filed机制进行结构化的日志记录 线程安全 安装 go get github.com/sirupsen/logrus 基本示例 使用Logrus最简单的方法是简单的包级导出日志程序: package main import ( log "github.com/sirupsen

vue父子组件钩子函数的执行顺序

喜夏-厌秋 提交于 2019-12-01 09:52:37
加载渲染过程  父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted 更新过程 父beforeUpdate->子beforeUpdate->子updated->父updated 销毁过程 父beforeDestroy->子beforeDestroy->子destroyed->父destroyed 补充钩子函数的执行顺序 beforeCreate created beforeMount mounted beforeUpdate updated activated deactivated beforeDestroy destroyed errorCaptured 总结: 1.beforeCreate执行时:data和el均未初始化,值为undefined 2.created执行时:Vue 实例观察的数据对象data已经配置好,已经可以得到data的值,但Vue 实例使用的根 DOM 元素el还未初始化 3.beforeMount执行时:data和el均已经初始化,但此时el并没有渲染进数据,el的值为“虚拟”的元素节点 4.mounted执行时:此时el已经渲染完成并挂载到实例上 5.beforeUpdate和updated触发时

什么是vue生命周期和生命周期钩子函数?

白昼怎懂夜的黑 提交于 2019-12-01 09:44:38
1、vue生命周期和生命周期钩子函数: vue 的生命周期是: vue 实例从创建到销毁,也就是从 开始创建 、 初始化数据 、 编译模板 、 挂载Dom→渲染 、 更新→渲染 、 卸载 等一系列过程。 在这个过程中也会 运行 一些叫做 生命周期钩子的函数 ,这给了 用户 在不同阶段 添加自己的代码 的机会。 问题二:vue生命周期钩子函数有哪些? 生命周期钩子函数(11个) 类型 详细 beforeCreate Function 在 实例初始化之后 ,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。 created Function 在 实例创建完成后 被立即调用。在这一步,实例已完成以下的配置: 数据观测 (data observer) , 属性和方法的运算 , watch/event 事件回调 。然而,挂载阶段还没开始,$el 属性目前不可见。 beforeMount Function 在 挂载开始之前 被调用:相关的 render 函数首次被调用。 mounted Function el 被新创建的 vm.$el 替换,并 挂载到实例上去之后 调用该钩子。如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。 beforeUpdate Function 数据更新时调用 ,发生在虚拟