[Linux] 建立一个Module,在hook函数中提取数据包数据。怎么做到内核态与用户态的交互? 1C

现在的情况是,我建立这个Netfilter的机器,只用接收流量用作监控,不用对流量包做后续处理。
我应该怎么做才能将每个数据包发送到用户态做数据处理?
由于是对每个数据包做处理,所以传输需要在hook中完成。常见的syscall,如read,copy_to_user等好像是无法使用的。
而且还要考虑到内核态和用户态的并行处理:内核态接收数据包、传输给用户态,用户态接受数据包,进行处理。

0

1个回答

1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Linux用户态和内核态交互的几种方式
创建于 2013-04-13nn迁移自本人的百度空间nn--------------------------------nn1/内核态->用户态nn      在kernel module中调用printk是最简单的传递信息到用户空间的方法。nn nn2/用户态->内核态nn      在linux中,用户对设备的操作往往被抽象为对文件的操作。利用这一特性,可以通过注册和实现伪字符设备...
linux用户态与内核态通讯及如何编写内核模块
通讯方式:procfs/socket/syscall/IOCTL常用的是socket/syscall/ioctl.ioctl机制,ioctl机制可以在驱动中扩展特定的ioctl消息,用于将一些状态从内核反应到用户态。Ioctl有很好的数据同步保护机制,不要担心内核和用户层的数据访问冲突,但是ioctl不适合传输大量的数据,通过和内存映射结合可以很好的完成大量数据交换过程。但是,ioctl的发起方一...
建立一个Module,在hook函数中提取数据包数据。怎么做到内核态与用户态的交互?
现在的情况是,我建立这个Netfilter的机器,只用接收流量用作监控,不用对流量包做后续处理。rn我应该怎么做才能将每个数据包发送到用户态做数据处理?rn由于是对每个数据包做处理,所以传输需要在hook中完成。常见的syscall,如read,copy_to_user等好像是无法使用的。rn而且还要考虑到内核态和用户态的并行处理:内核态接收数据包、传输给用户态,用户态接受数据包,进行处理。
netlink实现用户态和内核态数据交互
本文代码实现:用户进程发送“nihao”给内核,内核回复“niyehao”给用户态。rnrn1:netlink.h添加自己的宏。rn2:编写用户态程序。rn3:编写内核态程序。rnrnrn内核态,需要全局变量进行数据的交互。rnrnrn在模块init的时候,可以:rnnetlinkfd = netlink_kernel_create(&init_vrf, NL_MY, 0, kernel_rece
Linux下Netfilter创建自己的Hook,让数据包可以发送到用户层,然后统计节点负载信息
Linux下Netfilter创建自己的Hook函数,让数据包可以发送到用户层,然后统计节点的负载信息nn希望实现的功能如题目所示,该功能实际分为几个步骤nnn在用户空间编写自己的Hook函数C文件,并将该文件编译成内核模块(后缀为.ko),然后加载到内核中,并测试Hook函数是否起作用n在用户空间编写C文件,接收内核传过来的数据包,统计负载信息,然后回传给内核nnnnnnn一、在用户空间编写自己...
Linux内核学习笔记之使用ioctl函数实现用户态命令
驱动程序:nn nn nnn/********************************n * GPIO驱动程序控制GPIO接口高低电平n * 基于gpio库,四个GPIO识别为一个设备n * 使用miscdevice结构体动态分配设备号,自动创建/dev/文件n * 使用ioctl函数实现用户态命令n * 更多内容见于笔记05n * 开发板:Tiny 4412n * 主控芯片:Exynos...
内核态与用户态、系统调用与库函数、文件IO与标准IO、缓冲区等概念介绍
概述nnnnLinux提供了两套可以用于文件的IO接口:nnn文件IO: open、create、close、lseek、read、write、fcntl、ioctl等n标准IO: FILE、fopen、fwrite、fread、等nnn为了理解文件IO和标准IO的区别,可能要先理解下用户态与内核态,系统调用与库函数的概念。nnnn用户态和内核态nn什么是用户态和内核态: nnn内核态: CPU
linux socket实现内核态和用户态通信
linux sockey实现内核态和用户态通信
对linux内核、用户空间、内核态、用户态的理解
首先,linux系统有内核和用户空间之分rn基本上可以理解成用户空间就是我们平常运行着的一个个的进程,而内核不是进程,内核是进程的管理者,同时有操作硬件的能力。rn内核还运行着一些内核线程(内核无内核进程的概念,内核线程主要做一些类似定时将页写回硬盘的操作,是守护线程)rn用户空间的程序想要操作硬件设备,就必须使用内核态来运行进程,要通过系统调用来从用户态陷入到内核态,然后进行系统调用操作硬件设备
内核态到用户态切换(二)
引言:(一)分析了0号进程(任务0)、内核线程、用户线程相关问题,有了这个铺垫,开始本文的分析。3)如何从内核空间切换到用户空间去的?n假设1号进程(内核态)init中已ramdisk_execute_command已传入,毕竟是要分析android系统的。static int __init kernel_init(void * unused) {n if (!ramdisk_execute_
linux系统调用用户态到内核态流程
Linux系统调用流程分析n一直很好奇系统调用的详细过程,只简单的了解系统调用是用户与内核交互的借口,看了几天的内容,不知道从何下手开始写,今天略有头绪,做以简单总结。n1,  什么是系统调用。n系统调用:系统调用是操作系统为用户提供的一系列API;系统调用将用户的请求发给内核,内核执行完以后,将结果返回给用户;n2, 一个系统调用的流程。
linux下内核态锁与用户态锁详细介绍
1 内核态下锁nn1.1 spinlock_tnnspinlock_t成为自旋锁,它用在临界区代码非常少的情况下。自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,如果释放了该锁,请求锁的调用者可以立即得到它,继续执行。自旋锁可用于中断服务程序之中。nn初始化nnspinlock_t使用前需进行初始化,自旋锁的初始化有两种方式:n...
Linux用户态和内核态之间的交互
方式有:netlink
为什么内核不能调用用户态代码???
我们知道内核和用户共用4GB空间(32位),共用一套32位地址,此外内核的权限是0,那么内核理论上可以访问4GB空间的任意地方,但是为什么你重没有见过内核调用用户态的代码,或读写用户态的数据?哈哈!因为你忽略了两个细节:(1)这里用的是虚拟地址。(2)内核态和用户态是异步的。由于这两个原因,内核永远不知道究竟是哪个进程了他处于同一时空。比如:4点钟,进程A的fun()在物理空间上。5点钟,进程A的...
Linux用户态和内核态间的转换
因为操作系统的很多操作会消耗系统的物理资源,例如创建一个新进程时,要做很多底层的细致工作,如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录、页表等,这些操作显然不能随便让任何程序都可以做,于是就产生了特权级别的概念,与系统相关的一些特别关键性的操作必须由高级别的程序来完成,这样可以做到集中管理,减少有限资源的访问和使用冲突。Intel的X86架构的CPU提供了0到3四个特权级,而在我们Linu
Linux下如何从用户态切换到内核态?
首先我们得明白什么是用户态和内核态?rn明白这两个概念之前,我们得知道用户空间和内核空间。rn用户空间:指的就是用户可以操作和访问的空间,这个空间通常存放我们用户自己写的数据等等;而内核空间则是系统内核来操作的一块空间,这块空间里面存放系统内核的函数、接口等。rn不管对于Linux还是Windows, 他们都具有自己用户空间和内核空间。当一个程序运行时,如果它是在用户空间下执行,我们把此时运行得程序的这...
call_usermodehelper()函数分析(内核态调用用户态函数)
如何在Linux内核中执行某些用户态程序或系统命令?在用户态中,可以通过execve()实现;在内核态,则可以通过call_usermodehelpere()实现该功能。如果您查阅了call_usermodehelper()内核函数的源码实现,就可以发现该函数最终会执行do_execve()。而execve系统调用在经历内核的系统调用流程后,也会最终调用do_execve()。 代码实例1 内核态...
用户态切换到内核态
1.切换时机nnn1、发生系统调用时n2、产生异常时n3、外设产生中断时nnn2.用户态到内核态的切换过程nn1.读取tr寄存器,访问TSS段nnnTSS段保存内核栈信息nnn2.从TSS段中的sp0获取进程内核栈的栈顶指针nnnsp:堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。nnn3.在内核栈中保存当前cs,ss,eip,esp寄存器的值(地址)nnncs 为代码段寄存器n...
用户态切换到内核态的3种方式
1.系统调用rnrn2.异常rnrn3.外围设备的中断
Linux 基于IPqueue机制在用户修改数据包(一)——内核数据包结构
用户态接受数据报文的代码,测试内核态与用户态通信的TCP和UDP通信代码
什么是用户态?什么是内核态?如何区分?
本知识点来自网易云课堂的上课笔记,linux内核分析----中国科学技术大学软件学院:孟宁rn 一般现代CPU都有几种不同的指令执行级别。rn在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态。rn而在相应的低级别执行状态下,代码的掌控范围会受到限制。只能在对应级别允许的范围内活动。rn举例:rnintel x86 CPU有四种不同的执行级别0-3,linu
对内核,内核线程,用户线程,用户态,内核态,进程等理解
最近一直在研究操作系统,浅谈一下,rn以下文章涉及到我对内核,内核线程,用户线程,用户态,内核态,进程等理解rn如果有理解不对的地方,希望大神可以指出错误.rn我对Linux 最近的理解,Linux内核是一个支撑软件,是操作系统的核心,负责管理所有的硬件资源,cpu,内存,文件等,我先说一下我理解的进程和线程,进程就是一个程序(软件)的动态过程,软件本身是静态,当启动软件时操作系统就会为这个软件启动一个...
Linux 用户态与内核态的交互 ---netlink篇的源码.rar
Linux 用户态与内核态的交互 ---netlink篇的源码
Linux用户态与内核态交互 netlink的源码
Linux的用户态与内核态交互 netlink的源码.rar
linux网络用户态与内核态接口:ioctl、netlink
如下代码应用ioctl实现读取eth2接口的ip、mac地址:netlink同样可以,即netlink socket即可,详情见百度:
linux内核--网卡接收数据包的函数调用关系
网卡中断函数 e1000_intr()      -------->加入napi链表 __napi_schedule()-------->启动napi软中断 __raise_softirq_irqoff()-------->软中断处理函数 net_rx_action()-------->取napi链表节点,并针对该网卡轮询收包 poll()-------->轮询完成 ...
Netfilter框架通过hook捕获数据包
数据包截获:NetfilterrnNetfilter 是由内核 2.4.x 和 2.6.x 提供的数据包截获机制,它替代了内核 2.2.x 中 使用的 ipchains、防火墙钩子和其他方法。Netfilter 也可以作为 LKM 获得。nn要使用 netfilter,在内核编译时设置 Packet Filtering 选项。nn可以对采用防火墙钩子机制的同类应用程序使用 netfilter 机制
内核态与用户态通信方式——Nelink
内核态与用户态通信方式Linux下内核空间与用户空间进行通信的方式主要有system call、sysctl、procfs、模块参数、debugfs、relayfs、sysfs和netlink等。Why NetlinKnfull-duplexn模块参数、sysfs、procfs、debugfs和relayfs都是基于文件系统,用于内核向用户发送消息;sysctl和system call是用户向内核发
现代操作系统学习笔记——内核态与用户态、系统调用
本文为学习《现代操作系统》时遇到的疑问,为网上查找资料的总和。内核态与用户态操作系统需要CPU的两种状态,即内核态与用户态,两种状态的不同主要体现在所能使用的指令范围上。内核态:可以执行任何指令,对所有硬件具有完全访问权,操作系统就运行在内核态。用户态:只能使用计算机指令集的一个子集,不允许执行某些指令。两种状态的不同:除了可使用指令的不同之外,处于用户态执行时,能访问的内存空间收到限制,所占用的...
用户线程/内核线程、用户态/内核态、用户栈/内核栈的理解
1、用户线程、内核线程nn用户线程n程序员需要自己实现线程的数据结构、创建销毁和调度维护。也就相当于需要实现一个自己的线程调度内核。nnn 内核线程n n程序员直接使用操作系统中已经实现的线程,而线程的创建、销毁、调度和维护,都是靠操作系统(准确的说是内核)来实现,程序员只需要使用系统调用。nnjdk1.2之前版本需要程序员自己实现,而之后的版本调用操作系统提供的相关接口。nn2、用户态、内核态n...
Linux用户态与内核态交互数据---socket函数
1、socket函数:n功能描述:nsocket函数是任何套接口网络编程中第一个使用的函数,它向用户提供一个套接字,即套接口描述文件字,它是一个整数,如同文件描述符一样,是内核标识一个IO结构的索引。通过socket函数,我们指定一个套接口的协议相关的属性,为进行使用socket api做好准备。nnnnnint socket(int family, int type, int pr
Linux内存管理 —— 内核态和用户态的内存分配方式
1. 使用buddy系统管理ZONEnn我的这两篇文章buddy系统和slab分配器已经分析过buddy和slab的原理和源码,因此一些细节不再赘述。nn所有zone都是通过buddy系统管理的,buddy system由Harry Markowitz在1963年提出。buddy的工作方式我就不说了,简单来说buddy就是用来管理内存的使用情况:一个页被申请了,别人就不能申请了。通过/proc/b...
Linux内核态与用户态通信篇(一)—— Netlink
转自 http://blog.csdn.net/u012819339/article/details/51334600rnrnrnrnrnlinux-3.10.36版本的内核相比linux-2.6.36版本中netlink的代码有所变化,以前的代码已经不能成功编译了。rnrnnetlink是linux内核的一套基于socket的通信机制,那么,只需要知道怎么创建套接字,发送数据,接收数据就行了。r
Linux驱动之i2c用户态函数调用
一、概述I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员的布线.二、用户态实现设备驱动  在Linux内核代码文件i2c-dev.c中实现了I2C适配器设备文件的功能,针对每个适配器生成一个主设备号为89的设备节点(次设备号为0-255),I2c-dev.c并没有针对特定的设备而设计,只是提供了通用的read(),write(),和ioctl()等文件操作...
linux用户态、内核态的切换,SWI指令的理解
内核态的代码可以直接操作寄存器,把自己切向用户态,但是用户态想切换进入内核态,就需要费一番周折了总体思路是这样的:异常服务函数和中断服务函数都是运行在内核态的,在普通模式下,用户如果想干一些特权功能,通过修改寄存器直接进入内核态是不可能的,不妨通过异常服务函数来做,只要程序员们提前约定好协议,把想做的事情放到异常服务函数中就行了。对于各种各样的特权操作代码(也即,各种系统调用system_call...
内核态空间地址直接映射到用户态空间访问
【摘要】Linux中的内核空间到用户空间的地址映射让用户层应用可以直接访问内核地址,这就是mmap方法。应用程序通过内存映射可以直接访问设备的I/O存储区或DMA缓冲。内存映射使用户空间的一段地址关联到设备内存上,程序在映射的地址范围内进行读取或者写入,实际上就是对设备的访问。
内核和用户空间的消息传递-异步通知 (1)
背景: 当内核空间的驱动收发数据需要通知用户空间时,有以下几种方法:n1.异步通知机制:/* 异步信号处理函数 */n signal(SIGIO, logic_PCMHandler);nn /* 设置驱动绑定对应的异步通知发生器 */n encoder_index = m31_GetEncodeIndex();n logic_SetDeviceIndex(encoder_
Linux内核态、用户态以及fork进程管理
一:内核态和用户态内核态: 通常一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络,进程间通信等系统服务程序共同组成。其独立于普通应用程序,一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限,这种系统态和被保护起来的内存空间统称为内核空间。用户态: 应用程序在用户空间执行,它们只能看到允许它们使用的部分系统资源,并且
netfilter数据包过滤
rn    iptables可以很方便的构建系统防火墙,那它是如何实现的呢?Linux内核添加了netfilter机制,在IP协议栈上传递过程中,选择了5个检查点。利用5个检测点,查阅用户注册的回调处理函数,根据用户自定义回调函数监视进出的网络数据包。rn  rn rn rn有了上面的知识,可以实现自己的iptables。rn rn一.编码rn    该示例简单拦截所有到达本机的http请求。rn...
利用netfilter截获数据包基础知识及实现
本着记录自己疯狂过的青春,对netfilter的应用学习做点记录。0x00前提双网卡硬件设备作中间件,一个网卡接收向另一网卡转发时进行操作数据包。下文中举例eth0为进入,eth1为发出,相对而言。本次开发利用netfilter框架进行完整开发,基本实现对数据包的任意操作。0x01 什么是netfilterNetfilter是linux2.4.x引入的一个子系统,作为一个通用的、抽象的框架,提供了...
文章热词 统计学稳健估计opencv函数 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 建立一个课程表数据库 数据库建立一个课程表