用户进程与内核进程通信netlink实例

2023-10-28

为了方便应用程序使用netlink接口,一个叫libnl库被开发.
1 下载libnl2 
http://packages.ubuntu.com/oneiric/libnl2
2 下载libnl2-dev
http://packages.ubuntu.com/precise/libnl2-dev
3 先安装libnl2 在安装libnl2-dev
 
应用层代码
 
#include <stdio.h>
#include <stdlib.h>
 
#include <netlink/netlink.h>
 
#define MY_MSG_TYPE (0x10 + 2)  // + 2 is arbitrary but is the same for kern/usr
int
main(int argc, char *argv[])
{
    struct nl_sock *nls;
    char msg[] = { 0xde, 0xad, 0xbe, 0xef, 0x90, 0x0d, 0xbe, 0xef };
    int ret;
 
    nls = nl_socket_alloc();
    if (!nls) {
        printf("bad nl_socket_alloc\n");
        return EXIT_FAILURE;
    }
 
    ret = nl_connect(nls, NETLINK_USERSOCK);
    if (ret < 0) {
        nl_perror(ret, "nl_connect");
        nl_socket_free(nls);
        return EXIT_FAILURE;
    }
 
    ret = nl_send_simple(nls, MY_MSG_TYPE, 0, msg, sizeof(msg));
    if (ret < 0) {
        nl_perror(ret, "nl_send_simple");
        nl_close(nls);
        nl_socket_free(nls);
        return EXIT_FAILURE;
    } else {
        printf("sent %d bytes\n", ret);
    }
 
    nl_close(nls);
    nl_socket_free(nls);
 
    return EXIT_SUCCESS;
}
 
内核代码
 
#include <linux/kernel.h>
#include <linux/module.h>
 
#include <net/sock.h>
#include <net/netlink.h>
 
#define MY_MSG_TYPE (0x10 + 2)  // + 2 is arbitrary. same value for kern/usr
 
static struct sock *my_nl_sock;
 
DEFINE_MUTEX(my_mutex);
 
static int
my_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
{
    int type;
    char *data;
 
    type = nlh->nlmsg_type;
    if (type != MY_MSG_TYPE) {
        printk("%s: expect %#x got %#x\n", __func__, MY_MSG_TYPE, type);
        return -EINVAL;
    }
 
    data = NLMSG_DATA(nlh);
    printk("%s: x x x x x x x x\n", __func__,
            data[0], data[1], data[2], data[3],
            data[4], data[5], data[6], data[7]);
    return 0;
}
 
static void
my_nl_rcv_msg(struct sk_buff *skb)
{
    mutex_lock(&my_mutex);
    netlink_rcv_skb(skb, &my_rcv_msg);
    mutex_unlock(&my_mutex);
}
 
static int
my_init(void)
{
    my_nl_sock = netlink_kernel_create(&init_net, NETLINK_USERSOCK, 0,
            my_nl_rcv_msg, NULL, THIS_MODULE);
    if (!my_nl_sock) {
        printk(KERN_ERR "%s: receive handler registration failed\n", __func__);
        return -ENOMEM;
    }
 
    return 0;
}
 
static void
my_exit(void)
{
    if (my_nl_sock) {
        netlink_kernel_release(my_nl_sock);
    }
}
 
module_init(my_init);
module_exit(my_exit);
 
 
系统:ubuntu 10.04 ,内核: linux-2.6.38
编译应用层代码需要加入动态链接库 /usr/lib/libnl.so
即sudo gcc -o 1 1.c /usr/lib/libnl.so
 

转载于:https://www.cnblogs.com/kungfupanda/archive/2013/01/11/2856973.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用户进程与内核进程通信netlink实例 的相关文章

  • Apolo学习

    安装 java1 8 mysql 5 6 5以上 下载quickStart的包 早apollo下执行两个sql 如果不执行这两个sql apollo是执行不起来的 会有两个表来记录apollo的执行情况 其中一个表叫apolloportal
  • Sass语法(三)之循环

    一 数据类型 1 数字 如 1 2 13 10px 2 字符串 有俩种类型 a 有引号字符串 quoted strings 如 Lucida Grande http sass lang com b 无引号字符串 unquoted strin
  • C语言--指针:最底层的解释(慢慢懂~)

    指针 又可以叫它为地址 他表示的就是变量的被存储的地址 举个例子 创建整型变量a 于是a被存储到了内存中 我们就可以通过创建指针来找到他被存储到了哪个位置 取地址操作符 我们可以打印出a的指针 在这里 p为指针变量 指向a 不同于指针 打印
  • C++STL之vector与list

    文章目录 关于vector的用法 关于List的用法 vector和list的区别 关于vector的用法 include
  • C++ 享元模式

    什么是享元模式 享元模式是一种结构型设计模式 实现了在较少内存开销的同时 又支持了大量的对象 主要在资源有限的情况下 对创建大量对象行为的一种约束行为 享元模式的适用特征 当程序中有大量的相同对象 这些对象消耗了大量的内存 这些对象的状态可
  • centos7系统引导自动重启_Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏...

    一 处理linux系统故障的思路 作为一名优秀的linux运维工程师 一定要有一套清晰 明确的解决故障思路 当问题出现时 才能迅速定位 解决问题 在开始本文学习之前 我根据多年工作和处理问题和故障的经验 总结出了一套处理问题的一般思路 供大
  • 全卷积网络FCN详细讲解(超级详细哦)

    原文链接 https blog csdn net qq 41760767 article details 97521397 depth 1 utm source distribute pc relevant none task utm so
  • Job thrrew an unhandled exception 是什么报错

    Job threw an unhandled exception 是一个通用的错误信息 它表明在执行一个作业 Job 时发生了未处理的异常 这个错误信息并不提供具体的异常信息 而只是告诉你作业执行过程中出现了未处理的异常 并且该异常没有被适
  • HSQLDB 介绍

    HSQLDB HSQL使用 java 语言编写的免费数据库 相对其他数据库 体积很小 是一个非常轻量级的数据库 不需要安装 而且支持嵌套查询和Indentity主键 下面结合在程序中使用 对 HSQL 作个简要的介绍和使用 一 简介 HSQ
  • ABAP DOI详解(1)

    什么是 DOI DOI 是Desktop Office Integration的缩写 是 SAP 提供的解决与 Office 集成的技术方案 早期 SAP 用 OLE 技术解决 与 Office 集成 OLE 语法参照 VBA 在 ABAP
  • 挂载cifs报错mount error(13): Permission denied

    Linux挂载Windows共享时 报以下错误 mount error 13 Permission deniedRefer to the mount cifs 8 manual page e g man mount cifs 解决方法 用户
  • 网络基本概念

    目录 一 IP地址 1 概念 2 格式 3 特殊IP 二 端口号 1 概念 2 格式 3 注意事项 三 协议 1 概念 2 作用 四 协议分层 1 网络设备所在分层 五 封装与分用 六 客户端和服务器 1 客户端与服务器通信的过程 一 IP
  • AWS EKS集群动态创建卷并挂载

    文章目录 AWS EKS动态创建卷配置 需求 EBS CSI DRIVER 什么是EBS CSI DRIVER 为什么要安装EBS CSI DRIVER 将 Amazon EBS CSI 驱动程序作为 Amazon EKS 附加组件管理 先
  • java 用webservice 获取国内手机号码归属地省份、地区和手机卡类型信息

    提供一个web服务网址供大家学习 http webservice webxml com cn WebServices WeatherWebService asmx 或者 http www webxml com cn zh cn web se
  • 两台Windows文件服务器同步,windows多服务器同步文件

    windows多服务器同步文件 内容精选 换一换 当创建文件系统后 您需要使用云服务器来挂载该文件系统 以实现多个云服务器共享使用文件系统的目的 本章节以Windows 2012版本操作系统为例进行CIFS类型的文件系统的挂载 同一SFS容
  • 差分电流采样电路解读

    电流差分采样电路如上图所示 这也是经典的电压差分采样电路 电流采样是通过一个小电阻 约几毫欧到几十毫欧之间 将电流信号转换成电压信号来进行采样 原理比较简单 但在实际测试过程中存在一些问题 现在对这些问题进行记录并解释 问题如下 1 采样电
  • 博途组态阀岛_SMC EX260总线阀岛

    在博途中组态SMC EX260 SPN根据SMC EX260 SPN操作手册指令配置参数以控制每个点位 去SMC官网下载EX260 GSD文件及EX260 SPN operation manual操作手册 https www smc eu
  • 谈一谈浏览器与Node.js中的JavaScript事件循环,宏任务与微任务机制

    JavaScript中的异步代码 JavaScript是一个单线程非阻塞的脚本语言 这代表代码是执行在一个主线程上面的 但是JavaScript中有很多耗时的异步操作 例如AJAX setTimeout等等 也有很多事件 例如用户触发的点击
  • 获得绝对路径的方法 和 除去URI路径留下后面部分的方法

    在JSP中 如果想要获得绝对路径 可以用EL表达式如下所示 以href xxx 为例 a href pageContext request contextPath xxx XXX a 如果需要留下URI后面的部分而去除前面的部分 则可以用下
  • 【已解决】Unable to negotiate with — port 22: no matching host key type found. Their offer: ssh

    标题 mac系统 想通过ssh连接 但出现以下报错 Unable to negotiate with 10 188 5 86 port 22 no matching host key type found Their offer ssh r

随机推荐

  • PyQt学习笔记:QItemSelectionModel.SelectionFlag枚举类的取值和含义

    PyQt学习笔记 QItemSelectionModel SelectionFlag枚举类的取值和含义 在PyQt中 QItemSelectionModel是用于管理模型和视图之间选择的类 它允许您跟踪和操作用户在视图中所做的选择 QIte
  • mysql+怎样查询最后几条_mysql 查询开头或最后几行

    mysql 查询开头或最后几行 Limit 在我们使用查询语句的时候 经常要返回前几条或者中间某几行数据 SELECT FROM table LIMIT offset rows rows OFFSET offset LIMIT 子句可以被用
  • 虚拟服务器设置 要重启,虚拟服务器设置 要重启

    虚拟服务器设置 要重启 内容精选 换一换 如果在创建云耀云服务器时未设置密码 或密码丢失 过期 可以参见本节操作重置密码 运行中的云服务器重置密码需重启后新密码才能生效 请按照提示勾选 自动重启 密码丢失或过期前 已安装密码重置插件 公共镜
  • hutool工具包导出excel文件filename乱码与中文列宽自适应问题

    hutool工具包导出excel文件filename乱码与中文列宽自适应问题 话不多说 直接代码 修改之前 导出excel public static void downloadExcel List
  • 奥托零件价目表

    曲柄连杆机构 代码 名称 车型 状态 指导零售价 150000 活塞0 00 电喷 SC7080 配套 30 111210 活塞环 0 50 SC7080 配套 112 111260 连杆总成 SC7081 配套 51 136080 活塞3
  • Python实现字符串模糊匹配

    在一个字符串中 有时需对其中某些内容进行模糊匹配以实现条件的判定 如在 你好 hello world 中判断是否含有 llo Python中通过re search 方法实现 特别地 对于首位起始的内容匹配 也可通过re match 方法实现
  • spring配置文件中分别使用多个properties文件

    spring配置文件中分别使用多个properties文件 在使用spring时 有时候需要为了模块配置方便有时候需要针对不同的模块建立不同的applicationContext的配置文件 然后在对应模块的配置文件中对相应的模块进行单独配置
  • 通过Struts2文件下载时Can not find a java.io.InputStream with the name 异常

    异常堆栈信息 引用 严重 Can not find a java io InputStream with the name photoStream in the invocation stack Check the
  • openssh升级之后git账户免密登陆失效

    昨天升级了openssh之后 git操作是免密的却要输入密码了 但是输入正确密码却又一直提示密码错误 查看sshd服务状态发现使用git账户登陆的时候会提示 get shadow information for nouser 额 这是因为我
  • 解读奥哲·云枢:低代码拉动“企业数字化转型”进度条

    世界上有两种生意 一种是标准化 一种是个性化 20世纪初 美国亨利 福特提出了大规模生产方式 由于可以带来成本的大幅降低 大规模生产方式推动了汽车行业长达半个多世纪的发展 几乎被北美和欧洲的每一种工业活动所采纳 而其最显著的特征则是提供标准
  • VUE之jspreadsheet电子excel表格实时动态高度设置

    问题 excel电子表格在不同屏幕大小下横向滚动条会被遮挡 排查原因 由于excel高度固定导致 解决方法 设计页面较多 所以封装公共方法 步骤 1 使用混入封装动态设置excel高度方法 const mixinJexcel mounted
  • 【区块链】 区块链哈希算法

    哈希算法是什么 哈希算法是区块链中保证交易信息不被篡改的单向密码机制 哈希算法接收一段明文后 以一种不可逆的方式将其转化为一段长度较短 位数固定的散列数据 它有两个特点 加密过程不可逆 意味着我们无法通过输出的散列数据倒推原本的明文是什么
  • 数组的排序函数

    1 sort sort 函数对索引数组进行升序排序 改变原数组
  • 【数据库内核】01——从0到1数据库内核实战,挑战数据库领域最强大脑

    前 言 作者简介 半旧518 长跑型选手 立志坚持写10年博客 专注于java后端 数据库内核及生态开发 专栏简介 相当硬核 讲解数据库内核开发的理论 实战 带你深入解读数据库源码 剖析内核原理 实战手撸数据库内核 文章简介 一篇文章快速上
  • 对部署在docker上的gitlab,修改成员用户信息和重置密码

    1 先启动并进入docker上的gitlab docker exec ti gitlab bin bash 2 启动gitlab rails 这个启动过程会有点慢 加载完之后是这样 3 查找用户信息 先定位自己需要更改的账户的ID 可以先把
  • CMake 打包已经存在的动态库生成 target

    一 背景 在 CMakeLists txt 中 某模块 A 通过 add subdirectory 引入模块 B 模块 B 通过 add subdirectory 引入模块 C 模块 C 里面本身就是一个开源的动态库 比如 libtask
  • Geth在以太坊智能合约开发中最常用的工具(必备开发工具)

    命令用法 geth 选项 命令 命令选项 参数 版本 1 7 3 stable 命令 account 管理账户 attach 启动交互式JavaScript环境 连接到节点 bug 上报bug Issues console 启动交互式Jav
  • 多元回归预测

    文章目录 效果一览 文章概述 部分源码 参考资料 效果一览 文章概述 多元回归预测 Matlab多元线性回归MLR多变量预测模型 多变量输入结构 评价指标包括 MAE RMSE和R2等 代码质量极高 方便学习和替换数据 要求2018版本及以
  • Python 画多个子图函数 subplot

    子图函数 subplot 若要 pyplot 一次生成多个图形 一般要用到subplot函数 另外还有一个subplots函数 两个函数比较接近但略有区别 限于篇幅 我们只介绍 subplot函数 它的基本语法如下 ax plt subpl
  • 用户进程与内核进程通信netlink实例

    为了方便应用程序使用netlink接口 一个叫libnl库被开发 1 下载libnl2 http packages ubuntu com oneiric libnl2 2 下载libnl2 dev http packages ubuntu