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

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

0

1个回答

1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Linux用户态与内核态交互数据---socket函数
1、socket函数: 功能描述: socket函数是任何套接口网络编程中第一个使用的函数,它向用户提供一个套接字,即套接口描述文件字,它是一个整数,如同文件描述符一样,是内核标识一个IO结构的索引。通过socket函数,我们指定一个套接口的协议相关的属性,为进行使用socket api做好准备。 int socket(int family, int type, int pr
Linux用户态和内核态交互的几种方式
创建于 2013-04-13 迁移自本人的百度空间 -------------------------------- 1/内核态->用户态       在kernel module中调用printk是最简单的传递信息到用户空间的方法。   2/用户态->内核态       在linux中,用户对设备的操作往往被抽象为对文件的操作。利用这一特性,可以通过注册和实现伪字符设备...
内核态与用户态交互的方式(3)
http://www.ibm.com/developerworks/cn/linux/l-netlink/index.html本人不具备任何版权,如需转载请著名出处和作者。多数的 Linux 内核态程序都需要和用户空间的进程交换数据,但 Linux 内核态无法对传统的 Linux 进程间同步和通信的方法提供足够的支持。本文总结并比较了几种内核态与用户态进程通信的实现方法,并推荐使用 net
建立一个Module,在hook函数中提取数据包数据。怎么做到内核态与用户态的交互?
现在的情况是,我建立这个Netfilter的机器,只用接收流量用作监控,不用对流量包做后续处理。rn我应该怎么做才能将每个数据包发送到用户态做数据处理?rn由于是对每个数据包做处理,所以传输需要在hook中完成。常见的syscall,如read,copy_to_user等好像是无法使用的。rn而且还要考虑到内核态和用户态的并行处理:内核态接收数据包、传输给用户态,用户态接受数据包,进行处理。
linux用户态与内核态通讯及如何编写内核模块
通讯方式:procfs/socket/syscall/IOCTL常用的是socket/syscall/ioctl.ioctl机制,ioctl机制可以在驱动中扩展特定的ioctl消息,用于将一些状态从内核反应到用户态。Ioctl有很好的数据同步保护机制,不要担心内核和用户层的数据访问冲突,但是ioctl不适合传输大量的数据,通过和内存映射结合可以很好的完成大量数据交换过程。但是,ioctl的发起方一...
linux内核中读写用户态文件
在VFS的支持下,用户态进程读写任何类型的文件系统都可以使用read和write着两个系统调用,但是在linux内核中没有这样的系统调用我们如何操作文件呢?我们知道read和write在进入内核态之后,实际执行的是sys_read和sys_write,但是查看内核源代码,发现这些操作文件的函数都没有导出(使用EXPORT_SYMBOL导出),也就是说在内核模块中是不能使用的,那如何是好? 通过查
使用proc文件映射的方式实现用户态跟内核态的数据交互
我们一般的应用程序都是直接跑在用户态的,Lin
linux内核态与用户态通信方式
下面对linux内核态与用户态通信方式中的procfs进行讲解。 /proc主要存放内核的一些控制信息,所以这些信息大部分的逻辑位置位于内核控制的内存,在/proc下使用ls -l你会发现大部分的文件或者文件夹的大小都是0,不过使用cd命令进到文件夹下或者使用cat命令查看某些文件的内容确实能查看到一些信息。这是因为/proc文件系统和其他常规文件系统一下把自己注册到虚拟文件系统层(VFS)
netlink实现用户态和内核态数据交互
本文代码实现:用户进程发送“nihao”给内核,内核回复“niyehao”给用户态。 1:netlink.h添加自己的宏。 2:编写用户态程序。 3:编写内核态程序。 内核态,需要全局变量进行数据的交互。 在模块init的时候,可以: netlinkfd = netlink_kernel_create(&init_vrf, NL_MY, 0, kernel_rece
Linux内核态与用户态进程通信方法-用户上下文
运行在用户上下文环境中的代码是可以阻塞的,这样,便可以使用消息队列和 UNIX 域套接字来实现内核态与用户态的通信。但这些方法的数据传输效率较低,Linux 内核提供 copy_from_user()/copy_to_user() 函数来实现内核态与用户态数据的拷贝,但这两个函数会引发阻塞,所以不能用在硬、软中断中。一般将这两个特殊拷贝函数用在类似于系统调用一类的函数中,此类函数在使用中往往"穿梭
linux内核态和用户态
内核态和用户态的最大区别在于特权级不同。运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。 当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态,比如testfork()最初运行在用户态进程下,当它调用fork()最终触发 sys_fork()的执行时,就切换到了内核态。 用户态切换到内核态的3种方式
Linux内核态与用户态通信的常用方法
前言 最近做的事情很多地方用到Linux驱动层与应用层的通信,在此总结下常见的并且在我工作中用到的通信方法。 总结 由于每种方法都可以找到大量的示例代码,同时还有详细的函数手册,我就不贴代码了。只列下相关的方法和一个链接。 procfs netlink syscall syscall的范围就广了,通过注册字符设备可以使用mmap和ioctl等来进行操作,要注意
内核态和用户态通信(一)--认识
linux通信
内核态与用户态交互的方式(1)
引自http://www.ibm.com/developerworks/cn/linux/l-kerns-usrs/本人不具有任何版权,如转载请著名作者出处。在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink 
linux socket实现内核态和用户态通信
linux sockey实现内核态和用户态通信
Linux下Netfilter创建自己的Hook,让数据包可以发送到用户层,然后统计节点负载信息
Linux下Netfilter创建自己的Hook函数,让数据包可以发送到用户层,然后统计节点的负载信息 希望实现的功能如题目所示,该功能实际分为几个步骤 在用户空间编写自己的Hook函数C文件,并将该文件编译成内核模块(后缀为.ko),然后加载到内核中,并测试Hook函数是否起作用 在用户空间编写C文件,接收内核传过来的数据包,统计负载信息,然后回传给内核 一、在用户空间编写自己...
4_用户态与核心态-用两种C代码实现Linux的某个系统调用
版权声明:陈诚 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ========================================================================== 程序员编程不可能很健壮,会出bug,假如写的程序可以任意控制计算机的资
Linux内核学习笔记之使用ioctl函数实现用户态命令
驱动程序:     /******************************** * GPIO驱动程序控制GPIO接口高低电平 * 基于gpio库,四个GPIO识别为一个设备 * 使用miscdevice结构体动态分配设备号,自动创建/dev/文件 * 使用ioctl函数实现用户态命令 * 更多内容见于笔记05 * 开发板:Tiny 4412 * 主控芯片:Exynos...
windows创建进程的用户态和内核态交互----小话windows(1)
作者:陈曦 日期:2012-6-19 12:28:30 环境:[win7旗舰版 SP1  ; Intel i3  x86, 支持64位  ;vs2010  ; wrk-v1.2  ; Virtual PC 2007   windows 2003 server sp1 standard edition镜像 ;WinDbg 6.11.0001.404(x86) ]  转载请注明出处
linux内核探索(5)--基于proc实现内核和用户态通信
目录 1、编写proc文件 2、编写配套的Makefile 3、测试 要求:实现一个proc文件,一个只读文件output,一个可写文件input;功能是:向input文件写入字符串后,可以从output文件中,读出input文件中反转后的字符串 1、编写proc文件 vim my_proc.c #include <linux/module.h> #include &l...
对linux内核、用户空间、内核态、用户态的理解
首先,linux系统有内核和用户空间之分 基本上可以理解成用户空间就是我们平常运行着的一个个的进程,而内核不是进程,内核是进程的管理者,同时有操作硬件的能力。 内核还运行着一些内核线程(内核无内核进程的概念,内核线程主要做一些类似定时将页写回硬盘的操作,是守护线程) 用户空间的程序想要操作硬件设备,就必须使用内核态来运行进程,要通过系统调用来从用户态陷入到内核态,然后进行系统调用操作硬件设备
linux的内核、内核态和用户态的区别
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序
Linux 内核态 与 用户态传递 实时信号
http://juckyjhon.blog.sohu.com/156355213.html   kernel: #include #include #include #include #include #include #include #define SIG_MYINT 33 #define PS_PID 30 //
linux系统调用用户态到内核态流程
Linux系统调用流程分析 一直很好奇系统调用的详细过程,只简单的了解系统调用是用户与内核交互的借口,看了几天的内容,不知道从何下手开始写,今天略有头绪,做以简单总结。 1,  什么是系统调用。 系统调用:系统调用是操作系统为用户提供的一系列API;系统调用将用户的请求发给内核,内核执行完以后,将结果返回给用户; 2, 一个系统调用的流程。
Linux内核分析(四):系统调用,用户态及内核态
何天杨+ 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000一、什么是系统调用 linux内核中设置了一组用于实现系统功能的子程序,称为系统调用。系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户
用户态驱动程序和核心态驱动程序
Windows驱动既可以运行在用户态也可以运行在和心态。 用户态驱动程序运行在其他应用程序代码运行的非特权处理器模式下,包括受保护的子系统代码,执行器。用户态驱动没有这个权限去得到系统出具除非调用Win32的API,这也叫做调用系统服务。 核心态驱动程序是系统执行者中的一部分在运行,底层的操作系统组件支持一个或多个受保护的子系统。 用户态驱动和核心态驱动有着不同的架构,不同的
用户态与内核态共享内存例程
例子中,用户态程序的KERNEL_VIRT_ADDR就是内核模块打印的地址p ,这里是hard coding(先加载内核模块,再把打印的地址赋值给KERNEL_VIRT_ADDR), 可以采用其他的方式传递。 2.6内核验证。 //kernel #include linux/config.h> #include linux/module.h> #inclu
用户态与内核态的区分
  一、 从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口:即系统调用。   系统调用:操作系统的最小功能...
内核态与用户态、系统调用与库函数、文件IO与标准IO、缓冲区等概念介绍
概述 Linux提供了两套可以用于文件的IO接口: 文件IO: open、create、close、lseek、read、write、fcntl、ioctl等 标准IO: FILE、fopen、fwrite、fread、等 为了理解文件IO和标准IO的区别,可能要先理解下用户态与内核态,系统调用与库函数的概念。 用户态和内核态 什么是用户态和内核态: 内核态: CPU
数据包在内核态得捕获、修改和转发
数据包在内核态得捕获、修改和转发(基于 netfilter)     忙活了好几天,经过多次得死机和重启,终于把截获的数据包转发的功能给实现了。同时,也吧sk_buff结构学习了一下。     本程序利用netfilter的钩子函数在PREROUTING处捕获数据包,并且修改数据包首部信息,之后直接转发,从而实现对数据包转发得功能。修改数据包得数据和地址之后,最主要的就是对tcp或dp校验和得
Linux系统的内核态和用户态
一、 Unix/Linux的体系架构   如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供
call_usermodehelper()函数分析(内核态调用用户态函数)
如何在Linux内核中执行某些用户态程序或系统命令?在用户态中,可以通过execve()实现;在内核态,则可以通过call_usermodehelpere()实现该功能。如果您查阅了call_usermodehelper()内核函数的源码实现,就可以发现该函数最终会执行do_execve()。而execve系统调用在经历内核的系统调用流程后,也会最终调用do_execve()。 代码实例1 内核态...
Linux用户态和内核态间的转换
因为操作系统的很多操作会消耗系统的物理资源,例如创建一个新进程时,要做很多底层的细致工作,如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录、页表等,这些操作显然不能随便让任何程序都可以做,于是就产生了特权级别的概念,与系统相关的一些特别关键性的操作必须由高级别的程序来完成,这样可以做到集中管理,减少有限资源的访问和使用冲突。Intel的X86架构的CPU提供了0到3四个特权级,而在我们Linu
为什么内核不能调用用户态代码???
我们知道内核和用户共用4GB空间(32位),共用一套32位地址,此外内核的权限是0,那么内核理论上可以访问4GB空间的任意地方,但是为什么你重没有见过内核调用用户态的代码,或读写用户态的数据?哈哈!因为你忽略了两个细节:(1)这里用的是虚拟地址。(2)内核态和用户态是异步的。由于这两个原因,内核永远不知道究竟是哪个进程了他处于同一时空。比如:4点钟,进程A的fun()在物理空间上。5点钟,进程A的...
Linux内核态与用户态通信篇(一)—— Netlink
转自 http://blog.csdn.net/u012819339/article/details/51334600 linux-3.10.36版本的内核相比linux-2.6.36版本中netlink的代码有所变化,以前的代码已经不能成功编译了。 netlink是linux内核的一套基于socket的通信机制,那么,只需要知道怎么创建套接字,发送数据,接收数据就行了。
Linux 用户态与内核态的交互 ---netlink篇的源码.rar
Linux 用户态与内核态的交互 ---netlink篇的源码
Linux内核使用ioctl函数实现用户态命令
转载自:https://blog.csdn.net/mumufan05/article/details/50507391 驱动程序: /******************************** * GPIO驱动程序控制GPIO接口高低电平 * 基于gpio库,四个GPIO识别为一个设备 * 使用miscdevice结构体动态分配设备号,自动创建/dev/文件 * 使用ioct...
Windows创建进程的用户态和内核态交互
Q: 在windows下,调用CreateProcess这个API来创建进程,它内部究竟做了什么? A: 对于操作系统,一般肯定是分层的。内核将处理最终的创建进程操作,但是它的上层可能有一些模块,进行一些参数合法性判断或者为了可移植考虑的判断。windows同样不例外。看看windows下面内核上面的模块: 不妨先写一个CreateProcess的程序,通过逆向工程
Linux用户态与内核态交互 netlink的源码
Linux的用户态与内核态交互 netlink的源码.rar
内核态与用户态详解
内核态与用户态是操作系统的两种运行级别,intel cpu提供Ring0-Ring3三种级别的运行模式。Ring0级别最高,Ring3最低。其中特权级0(Ring0)是留给操作系统代码,设备驱动程序代码使用的,它们工作于系统核心态;而特权极3(Ring3)则给普通的用户程序使用,它们工作在用户态。运行于处理器核心态的代码不受任何的限制,可以自由地访问任何有效地址,进行直接端口访问。而运行于用户态的代
文章热词 设计制作学习 统计学稳健估计opencv函数 机器学习教程 Objective-C培训 交互设计视频教程
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 数据库建立一个课程表 建立一个课程表数据库