linux内核驱动&Netfilter
文章平均质量分 88
本专栏主要介绍linux内核驱动开发,以及Netfilter/iptables机制分析与实践
selfimpr1991
这个作者很懒,什么都没留下…
展开
-
【Linux 驱动】Netfilter/iptables (八) Netfilter的NAT机制
NAT是Network Address Translation的缩写,意即“网络地址转换”。从本质上来说,是通过修改IP数据首部中的地址,以实现将一个地址转换成另一个地址的技术。当然在某种情况下,修改的不仅仅是IP首部的来源或目的地址,还包括其它要素。 随着接入Internet的计算机数量不断猛增,IP地址资源也就愈加显得捉襟见肘。这也是Ipv6出现的一大原因。我们现在所有的IP地址是32位,意味原创 2015-12-27 21:28:08 · 3405 阅读 · 1 评论 -
【Linux 驱动】Netfilter/Iptables (七) 内核协议栈skb封装分析(续六)
上文介绍了netfilter机制下,如何重造并发送一个skb,涉及到内核协议栈编程,而不是我们平时所说的用户层socket网络编程。我们先来介绍下上面skb重构程序涉及到的几个函数: 首先,有必要说下,也是后面每段程序中都有说道的,就是开发源码树版本是3.13的,这个版本的skb_buff和我们常见的2.4、2.6有很大的不同。一、主要看一下四个字段://typedef unsigned int原创 2015-12-25 15:24:57 · 3537 阅读 · 0 评论 -
【Linux 驱动】Netfilter/iptables (六) 内核协议栈编程(发送skb)
内核态基于 Netfilter 构造skb数据包 前面第四篇介绍了 Netfilter Hook 机制,我们知道了数据包在协议栈中传递时会经过不同的HOOK点,而每个HOOK点上又被Netfilter预先注册了一系列hook回调函数,每个数据包经过时都会经过这些hook函数的处理。在hook回调函数中,你可以进行任何操作,这些操作你都可以自定义,然后以模块的形式加载进去。这里我们给出一个实例:每收原创 2015-12-25 10:33:22 · 5431 阅读 · 0 评论 -
【Linux 驱动】Netfilter/iptables (五) 数据包过滤
通过前面的学习,我们窥探了整个Netfilter框架,下面我们就通过一些编程实例来进一步学习。一. 基于网络设备接口进行数据包过滤 根据hook函数接收的参数中的 struct net_device 结构,net_device 结构体用于描述网络接口设备,其中name这个成员表示对应设备的名字,我们可以通过比对来判断数据包的源接口或目的接口。/*安装一个丢弃所有进入我们指定接口的数据包的 netf原创 2015-12-22 14:48:45 · 7676 阅读 · 0 评论 -
【Linux 驱动】Netfilter/iptables (四) 窥探 Netfilter Hook 机制
上篇文章介绍了注册和注销Netfilter/iptables,其中对于hook函数,我们没有具体到数据包的规则处理,直接一律来者皆拒(NF_DROP)。ok,我们接着前面,深入探索下hook函数:typedef unsigned int nf_hookfn(const struct nf_hook_ops *ops, struct sk_buff *s原创 2015-12-22 14:46:00 · 3816 阅读 · 1 评论 -
【Linux 驱动】netfilter/iptables (三) 注册和注销Netfilter hook
继前面介绍了 netfilter hook,这里我们开始进行实例讲解: wqlkp.c:#include <linux/module.h>#include <linux/kernel.h>#include <linux/netfilter.h>#include <linux/netfilter_ipv4.h>MODULE_LICENSE("Dual BSD/GPL");static stru原创 2015-12-22 10:58:37 · 3527 阅读 · 1 评论 -
【Linux 驱动】netfilter/iptables (二) Netfilter hook 数据结构
Netfilter是Linux 2.4.x 引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤(filter)、网络地址转换(NAT)和基于协议类型的链接跟踪成为了可能。这些功能仅通过使用内核网络代码提供的各式各样的hook函数完成。对于数据在网络协议栈中的传送过程,前面我们花了较大篇幅,从原理到内核源码剖析了数据包在整个协议栈的传送过程,包括发送原创 2015-12-22 10:57:22 · 4555 阅读 · 0 评论 -
【Linux 驱动】netfilter/iptables (一) 基础概念
在介绍netfilter/iptables之前,我们先来了解下防火墙: 防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性。它通过访问控制机制,确定哪些内部服务允许外部访问,以及允许哪些外部请求可以访问内部服务。它可以根据网络传输的类型决定IP包是否可以传进或传出内部网。 防火墙通过审查经过的每一个数据包,判断它是否有相匹配的过滤规则,根据规则的先原创 2015-12-20 13:15:40 · 3617 阅读 · 0 评论 -
【Linux 驱动】中断处理(二)下半部tasklet
前面我们介绍了Linux驱动的[中断处理程序机制]由于其本身存在一些局限,所以它只能完成整个中断处理流程的上半部分。这里我们则着重介绍下半部。原创 2015-12-17 16:23:28 · 1229 阅读 · 0 评论 -
【Linux 驱动】中断处理(一)上半部
关于中断大家应该很熟悉,无论是操作系统的学习也好还是微机原理也好都会接触到中断。以前进行单片机单板开发的时候,会有外部中断,定时器中断以及串口中断,就是有一个事件触发(外部中断则是外部有按键触发(边缘触发和水平触发),串口中断则是串口有数据输入,定时器中断则是内部设置一个定时器,时间到了就触发),然后就去调用对应的中断处理函数。在此之前,需要保护现场,保存中断发生时的状态,比如寄存器,堆栈,各种变量原创 2015-12-20 10:43:00 · 2105 阅读 · 1 评论 -
【Linux 驱动】异步通知机制
异步通知机制:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,是一种“信号驱动的异步I/O”。信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候会到达。我们试图通过两个方面来分析异步通知机制: 从用户程序的角度考虑原创 2015-12-16 22:41:26 · 3537 阅读 · 1 评论 -
【Linux驱动】内存管理
关于linux内存管理的概念请参考笔者前面的博文: linux内存管理(一)基础篇 linux内存管理(二)伙伴算法 linux内存管理(三)slab分配器下面的驱动程序中的函数的区别,以及对应的函数介绍请参考第一个链接(linux内存管理基础篇)#include <linux/module.h>#include <linux/types.h>#include <linux/init.h>原创 2015-12-15 20:28:19 · 1531 阅读 · 0 评论 -
【Linux驱动】轮询操作select()和poll()
使用非阻塞I/O的应用程序通常会使用select()和poll()系统调用查询可对设备进行无阻塞的访问。select()和poll()系统调用最终会引发设备驱动中的poll()函数被执行。 select()和poll()系统调用的本质是一样的。本系列只关注设备驱动中的函数层,对于应用层具体请参考《APUE》或《TLPI》(linux/unix系统编程手册),楼主手上就有这两本书,在编写应用态测试原创 2015-12-12 15:27:40 · 4145 阅读 · 0 评论 -
【Linux驱动】阻塞型I/O(一)
校招结束很久了,回顾校招,除了阿里的笔试没通过以后,其余的均通过了笔试拿到面试机会(海康威视由于进错考场考错了试卷,没有拿到面试资格,不过后面去霸面,最后顺利拿到offer),在拿到几个还算重量级的offer以后,后面就开始休息了,大家都说今年的就业形势很艰难,说实话我没怎么感觉到,九月底底扎堆的公司太多了,曾记得,一天参加六场笔试+面试,不得不放弃一些面试,有舍有得嘛。 闲来无事,学习下linu原创 2015-12-11 21:19:35 · 1280 阅读 · 0 评论 -
【Linux驱动】阻塞型I/O(二+并发控制)
承接上文,这里继续学习linux内核驱动并发控制阻塞型I/O。 废话不多说,直接看代码,基础接口函数请自行查阅相关资料,比如《LDD》。 另外并发控制信号量和linux应用层的信号量概念和原理是差不多的,在内核态使用有所差别而已。原创 2015-12-11 20:49:57 · 1200 阅读 · 0 评论 -
【Linux驱动】字符设备驱动
本文假定读者具备一定linux基础以及对linux驱动基础有所了解。➜ ~ cat /proc/versionLinux version 3.13.0-43-generic (buildd@akateko) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #72-Ubuntu SMP Mon Dec 8 19:35:44 UTC 2014globa原创 2015-12-04 12:41:18 · 1245 阅读 · 0 评论