下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include #include #include #include #include #include #include#define SOCKET_OPS_BASE#define SOCKET_OPS_SET #define SOCKET_OPS_GET#define SOCKET_OPS_MAX128( SOCKET_OPS_BASE )( SOCKET_OPS_BASE )( SOCKET_OPS_BASE + 1)#define KMSG"a message from kernel"For personal use only in study and resea
2、rch; not for commercial use netfilter 提供了 nf_register_sockopt() 和 nf_unregister_sockopt() 来动态登记或取消 sockopt 命令 字;打开一个网络 socket 后可以使用 set/getsockopt(2) 可实现用户空间与内核的通信,本质 和 ioctl 差不多, 区别在于 set/getsockopt 不用新建设备, 直接利用系统已有的 socket 类型就 可以进行,可用 setsockopt 函数向内核写数据,用 getsockopt 向内核读数据。module.c:<linux/modu
3、le.h><linux/kernel.h><linux/types.h><linux/string.h><linux/netfilter_ipv4.h><linux/init.h> <asm/uaccess.h>#define KMSG_LENsizeof ( "a message from kernel"MODULE_LICENSE ( "GPL" );staticintrecv_msg ( structsock * sk , int cmd, void_user* user
4、gnedintlen )intret= 0;printk ( KERN_INFO "sockopt: recv_msg()n" );unsiif ( cmd = SOCKET_OPS_SET )char umsg 64;int len = sizeof ( char )* 64;memset ( umsg , 0, len );umsg , ret );ret = copy_from_user ( umsg , user , len ); printk ( "recv_msg: umsg = %s. ret = %dn"return 0;static i
5、nt send_msg ( struct sock * sk , int cmd, void _user * user , int* len )int ret = 0;printk ( KERN_INFO "sockopt: send_msg()n" );if ( cmd = SOCKET_OPS_GET )ret = copy_to_user ( user , KMSG, KMSG_LEN);printk ( "send_msg: umsg = %s. ret = %d. successn", KMSG, ret )return 0;static st
6、ruct nf_sockopt_ops test_sockops . pf = PF_INET ,. set_optmin=SOCKET_OPS_SET ,. set_optmax=SOCKET_OPS_MAX ,. set = recv_msg ,. get_optmin=SOCKET_OPS_GET ,. get_optmax=SOCKET_OPS_MAX ,. get = send_msg ,. owner = THIS_MODULE ,;static int _initinit_sockopt ( void )printk ( KERN_INFO "sockopt: init
7、_sockopt()n" ); return nf_register_sockopt (& test_sockops );static void _exitfini_sockopt ( void );printk ( KERN_INFO "sockopt: fini_sockopt()n"nf_unregister_sockopt(& test_sockops );module_init( init_sockopt);module_exit( fini_sockopt);user.c:#include <unistd.h>#includ
8、e <stdio.h>#include <sys/socket.h>#include <linux/in.h>#include <string.h>#include <errno.h>#define SOCKET_OPS_BASE#define SOCKET_OPS_SET #define SOCKET_OPS_GET#define SOCKET_OPS_MAX128( SOCKET_OPS_BASE )( SOCKET_OPS_BASE )( SOCKET_OPS_BASE + 1)#define UMSG#define"
9、a message from userspace"UMSG_LEN sizeof ( "a message from userspace" char kmsg 64;int main ( void ) int sockfd int len ;int ret ;sockfd = socket ( AF_INET , SOCK_RAW, IPPROTO_RAW ); if ( sockfd < 0)printf ( "can not create a socketn" ); return - 1;/*call function recv_ms
10、g()*/ret = setsockopt ( sockfd , IPPROTO_IP , SOCKET_OPS_SET , UMSG, UMSG_L EN);printf( "setsockopt: ret = %d. msg = %sn", ret , UMSG);len = sizeof ( char )* 64 ;/*call function send_msg()*/ret = getsockopt ( sockfd , IPPROTO_IP , SOCKET_OPS_GET , kmsg , &len ); printf( "getsockop
11、t: ret = %d. msg = %sn", ret , kmsg );ifstrerror( ret !=0)printf( errno( "getsockopt error: errno = %d, errstr = %sn" );, errnoclose ( sockfd ); return 0;Makefile:TARGET = testOBJS = test.oMDIR = drivers/miscEXTRA_CFLAGS = -DEXPORT_SYMTABCURRENT = $(shell uname -r)KDIR = /lib/modules/
12、$(CURRENT) /buildPWD = $(shell pwd)DEST = /lib/modules/$(CURRENT) /kernel/$(MDIR)obj-m := $(TARGET) .o $(TARGET)-objs := module.o default :make -C $(KDIR) SUBDIRS= gcc -o user user.c$(TARGET) .o : $(OBJS)$(LD) $(LD_RFLAG) -r -o $ ifneq (, $(findstring 2.4.,$(CURRENT) install :su -c "cp -v $(TAR
13、GET) .o elseinstall :su -c "cp -v $(TARGET) .ko endif$(PWD) modules$(OBJS)$(DEST) && /sbin/depmod -a"$(DEST) && /sbin/depmod -a"clean-rm -rf *.o *.ko . $(TARGET) .ko.cmd .*.flags *.mod.c modules.order Module.symvers .tmp_versions-rm -rf protocol/*.o protocol/.*.o.cmd-rm -rf user-include$(KDIR) /Rules.make仅供个人用于学习、研究;不得用于商业用途。For personal use only in study and research; not for commercial use.Nur f u r den pers?nlichen fu r Studien, Forschung, zu kommerziellen Zwecken verwendet werden.Pour l ' e tude et la recherche uniquementa des fins personne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市配送调度技师试卷及答案
- 城市地下管线探测技师考试试卷及答案
- 光缆-高速施工方案(3篇)
- 别墅屋脊施工方案(3篇)
- 东北换热站施工方案(3篇)
- 电网运行检测管理制度(3篇)
- 化工公用辅助车间管理制度(3篇)
- 外墙渐变施工方案(3篇)
- 儿科常见病护理风险防范
- 中央厨房职业发展前景
- 2026年春季开学第一课课件:马力全开
- 隧道施工安全培训课件教学
- 2026福建南平市建阳区属国有集团招聘50人备考题库及参考答案详解(新)
- 2025年辽宁医药职业学院单招职业技能测试题库附答案解析
- 国企中层干部招聘笔试试题
- 滨海新区2025-2026学年高二第一学期期末检测物理试题(原卷+解析)
- 2025年度公司财务预算报表模板(Excel自动计算)
- 2026年及未来5年市场数据中国岩土工程行业发展监测及投资前景展望报告
- 《我们共同的梦想》-2025-2026学年统编版(新教材)小学道德与法治二年级下册
- 2025-2030中医药产业发展现状与创新驱动政策建议研究报告
- 上海市长宁区2026届初三一模数学试题(含答案)
评论
0/150
提交评论