当前位置: 首页 > news >正文

netlink学习

netlink是什么

`netlink`是Linux内核中的一种进程间通信(IPC)机制。它允许内核空间与用户空间之间,以及用户空间进程之间进行双向通信。 

内核里的很多子系统使用`netlink`通信,包括网络管理(Routing,Netfilter),设备驱动管理(udev)以及安全审计(auditd)。`netlink`套接字类似于一个消息队列:用户空间进程可以向内核发送命令或请求,内核也可以通过`netlink`套接字向用户空间发送通知和数据。

在网络编程模型中,`netlink`套接字是特殊类型的套接字,它们使用`AF_NETLINK`作为其地址族。跟UNIX域套接字不同的是,`netlink`套接字并不依赖于文件系统,而是依赖于进程ID和`netlink`协议类型。

以下是一个使用`netlink`套接字创建一个socket的例子:

#include <sys/socket.h>
#include <linux/netlink.h>int sock_fd= socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);

在这个例子中,`NETLINK_ROUTE`参数表明我们打算使用`netlink`来获取和修改路由表信息。

当一个进程创建了一个netlink套接字后,它可以使用标准的`sendmsg`和`recvmsg`调用来发送和接收消息。消息的格式由对应的netlink协议来定义。

注意,使用`netlink`通常需要一些系统编程的知识,包括socket编程、数据结构和内存管理等。如果你想避免直接使用`netlink`,你可以选择使用封装了`netlink`的用户空间库,如`libnl`或者`libmnl`。

netlink与unix套接字的区别

`netlink`和`UNIX`套接字都是Linux系统中进行进程间通信(IPC)的机制,但它们之间有一些关键的区别:

1. **通信范围:** `UNIX`套接字主要用于同一台机器上的进程间通信,也就是本地IPC。相比之下,`netlink`套接字不仅可以用于用户空间进程之间的通信,还可以用于用户空间进程和内核之间的通信。

2. **依赖:** `UNIX`套接字依赖于文件系统,它们使用文件系统路径作为地址。`netlink`套接字则不依赖于文件系统,它们使用进程ID和`netlink`协议类型作为地址。

3. **使用场景:** `UNIX`套接字主要用于通用的IPC场景,例如,两个进程需要共享数据或者同步操作。相比之下,`netlink`套接字主要用于特定的系统管理和监控任务,例如,获取和修改网络路由表,接收设备状态改变的通知,或者执行安全审计。

4. **数据传输:** `UNIX`套接字可以使用`stream`(SOCK_STREAM)或`datagram`(SOCK_DGRAM)模式传输数据,分别提供了有序、可靠的字节流和无序、不可靠的消息。`netlink`套接字只支持`datagram`模式,它提供无序、不可靠的消息传输。

5. **API接口:** 尽管`netlink`和`UNIX`套接字都使用标准的套接字API(如`socket()`, `bind()`, `send()`, `recv()`等),但`netlink`消息的格式和解析方法与通常的套接字不同。一般来说,使用`netlink`需要更深入的系统编程知识,对于复杂的任务,可能需要使用专门的库,如`libnl`或`libmnl`。

总的来说,`netlink`和`UNIX`套接字都是强大的通信工具,但它们适用于不同的场景。选择使用哪种通信机制主要取决于你的具体需求。

libnl和libmnl是什么,如何使用

`libnl`和`libmnl`都是用来简化用户空间进程与Linux内核通过`netlink`套接字通信的库。它们提供了一套高级的API接口,使得开发人员不必直接处理`netlink`的底层细节。

**libnl**

`libnl`是一个全功能的`netlink`库,它提供了许多高级功能和便利函数,如对象抽象、错误处理和消息队列等。然而,这些特性也使得`libnl`相比较复杂且庞大,它的学习曲线可能会相对较陡。

使用`libnl`的基本步骤如下:

1. 创建`netlink`套接字。
2. 构造要发送的`netlink`消息。
3. 发送消息并接收回应。
4. 解析收到的回应消息。

以下是一个使用`libnl`获取网络链接列表的简单例子:

#include <netlink/netlink.h>
#include <netlink/socket.h>struct nl_sock *sock;// 创建netlink套接字
sock = nl_socket_alloc();// 连接内核
nl_connect(sock, NETLINK_ROUTE);// 发送请求以获取链接列表
nl_rtgen_request(sock, RTM_GETLINK, AF_UNSPEC, NLM_F_DUMP);// ...
// 接收和处理回应消息
// ...// 释放套接字
nl_socket_free(sock);

**libmnl**

与`libnl`不同,`libmnl`是一个轻量级的`netlink`库,它只提供了最基础的功能。`libmnl`并没有提供`libnl`那样的高级特性,但其API更简单,易于学习,且几乎没有额外开销。

以下是一个使用`libmnl`发送一个简单`netlink`消息的例子:

#include <libmnl/libmnl.h>
#include <linux/netlink.h>struct mnl_socket *nl;// 创建netlink套接字
nl = mnl_socket_open(NETLINK_ROUTE);// 绑定套接字
mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID);// ...
// 构造并发送消息
// ...// 释放套接字
mnl_socket_close(nl);

总的来说,`libnl`和`libmnl`都是有用的工具,它们让开发人员能更容易地使用`netlink`进行编程。选择哪一个库主要取决于你的需求—如果你需要一些高级特性,或者希望库能处理更多的底层细节,那么`libnl`可能是更好的选择。但如果你想要一个轻量级、基础的库,那么`libmnl`可能会更适合你。

相关文章:

netlink学习

netlink是什么 netlink是Linux内核中的一种进程间通信&#xff08;IPC&#xff09;机制。它允许内核空间与用户空间之间&#xff0c;以及用户空间进程之间进行双向通信。 内核里的很多子系统使用netlink通信&#xff0c;包括网络管理&#xff08;Routing&#xff0c;Netfilt…...

地理空间分析10——空间数据分析中的地理编码与Python

目录 写在开头1. 地理编码基础1.1 地理编码的基本原理1.1.1 坐标系统1.1.2 地名解析1.1.3 编码算法1.2 Python中使用地理编码的基础知识1.2.1 百度地图API1.2.2 高德地图API1.2.3 腾讯地图API1.3 Python中实现代码2. 逆地理编码2.1 利用Python进行逆地理编码2.1.1 获取高德地图…...

使用“快速开始”将数据传输到新的 iPhone 或 iPad

使用“快速开始”将数据传输到新的 iPhone 或 iPad 使用 iPhone 或 iPad 自动设置你的新 iOS 设备。 使用“快速开始”的过程会同时占用两台设备&#xff0c;因此请务必选择在几分钟内都不需要使用当前设备的时候进行设置。 确保你当前的设备已连接到无线局域网&#xff0c;并…...

计算机网络(第六版)复习提纲13

前同步码&#xff0c;七位1010交替出现&#xff0c;帧开始码&#xff1a;10101011 为什么没有帧结束&#xff1f;曼彻斯特码传播完成后&#xff0c;维持高电平&#xff0c;不再跳变&#xff0c;因此不必要设置帧结束。 3.无效的MAC帧 i.数据字段的长度与长度字段的值不一致&…...

[office] excel2010双向条形图制作 #经验分享#微信

excel2010双向条形图制作 本教程为大家介绍一下excel2010中excel2010双向条形图制作方法。 1.选中工作区域 2.点击插入-->图表,选择条形图 3.为美观可将中间竖线可去掉 4.方法是选中竖线,右击-->删除 5.接下来将图例靠上,选中图例,右击-->设置图例格式-->图例选项…...

优雅管理多线程异步任务 - 永动异步任务

引言 在现代应用程序中,经常需要处理长时间运行的异步任务,如消息推送、定时任务等。为了确保这些异步任务能够安全可靠地执行,我们需要一种优雅的管理方式。本文将介绍一种基于线程池的多线程异步任务管理方案,并详细讨论任务的优雅关闭。 1. 多线程异步任务管理的需求 …...

软考笔记--分布式数据库

分布式数据库系统是数据库技术与网络技术相结合的产物&#xff0c;其基本思想是将传统的集中式数据库中的数据分布于网络上的多台计算机中。分布式数据库系统通常使用较小的计算机系统&#xff0c;每台计算机可单独放在一个地方&#xff0c;每台计算机中都有DBMS的一份完整的复…...

vue项目中路由懒加载的三种方式

1 . vue异步组件技术 异步加载 vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 . 但是,这种情况下一个组件生成一个js文件 /* vue异步组件技术 */ { path: /home, name: home, component: resolve > require([/components/home],resolve) }, { path…...

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏6(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言生命 食物 水简单绘制UI玩家状态脚本生命值控制饱食度控制水分控制 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中…...

Cache Lab:Part A【模拟出使用LRU策略的高速缓存存储器组织结构】

目录 任务描述 知识回顾 实验内容 测试结果 Cache Lab 对应《CS:APP》6.3节至第六章结束的内容。 任务描述 Your job for Part A is to fill in the csim.c file so that it takes the same command line arguments and produces the identical output as the reference …...

操作系统基础:死锁

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 &#x1f426;1 死锁的概念&#x1f9a2;1.1 总览&#x1f9a2;1.2 什么是死锁&#x1f9a2;1.3 死锁、饥饿、死循环的区别&#x1f427;1.3.1 概念&#x1f427;1.3.2 区别…...

Ubuntu server如何使用 Daphne + Nginx + supervisor部署 Django

Django从 3.0版开始加入对ASGI的支持,使Django开始具有异步功能。 截止目前的5.0版,对异步支持逐步也越来越好,相信在未来的版本中异步将会支持的更加完善。 所以说,我们也需要适时的更新我们的技能,学会在asgi异步服务器环境中部署django项目! 在部署之前我们所有的依…...

Android 12.0 应用中监听系统收到的通知

1. 需求 在系统内置应用中或者在第三方应用中,获取Android系统收到的通知的内容. 2. NotificationListenerService 接口 Android 系统预留了专门的API, 即 NotificationListenerService 接口,它的源码路径为: 源码路径 : /frameworks/base/core/java/android/service/notifi…...

SpringBoot+Redis如何实现用户输入错误密码后限制登录(含源码)

点击下载《SpringBootRedis如何实现用户输入错误密码后限制登录&#xff08;含源码&#xff09;》 1. 引言 在当今的网络环境中&#xff0c;保障用户账户的安全性是非常重要的。为了防止暴力破解和恶意攻击&#xff0c;我们需要在用户尝试登录失败一定次数后限制其登录。这不…...

kotlin中的初始化问题纪录

1. init 代码块的顺序问题 init代码块和成员变量实质上是按先后顺序执行的。若果init{} 中有成员变量使用。要把成员变量放到代码块之前。 2. init代码块之中的函数问题 下面是一段错误的代码&#xff1a; class mkotlin{val info:Stringinit {getInfoMethod()info "adad…...

Web中的转发与重定向

转发与重定向 一、转发和重定向的概念1.转发2.重定向 二、JavaWeb 中的转发和重定向三、SpringMVC 中的转发和重定向1.转发(1) 默认的方式(2) 完整的方式 2.重定向 四、总结 一、转发和重定向的概念 在 Web 应用中&#xff0c;转发和重定向都是用于将请求从一个页面传递到另一…...

交叉注意力融合时域、频域特征的FFT + CNN-Transformer-CrossAttention轴承故障识别模型

目录 往期精彩内容&#xff1a; 前言 1 快速傅里叶变换FFT原理介绍 第一步&#xff0c;导入部分数据 第二步&#xff0c;故障信号可视化 第三步&#xff0c;故障信号经过FFT可视化 2 轴承故障数据的预处理 2.1 导入数据 2.2 制作数据集和对应标签 3 交叉注意力机制 …...

STM32读取MPU6050数据并通过角度值控制舵机运动(STM32、GY-521 MPU6050、SG90舵机、MG946舵机)

通过STM32F103C8T6读取MPU6050数据控制舵机运动&#xff08;STM32、GY-521 MPU6050、SG90舵机、MG946舵机&#xff09; 最终现象一、MPU6050数据读取二、舵机控制原理①什么是PWM&#xff1f;②STM32F103C8T6如何生成PWM&#xff1f;③控制舵机需要什么样的PWM波&#xff1f; 三…...

Unity_Playable工具使用

Unity_Playable工具使用 目录 Unity_Playable工具使用 1. Default Playables(Timeline扩展) 2. PlayableGraph Visualizer&#x...

Flutter canvas 画一条波浪线 进度条

之前用 Flutter Canvas 画过一个三角三角形&#xff0c;html 的 Canvas 也画过一次类似的&#xff0c; 今天用 Flutter Canvas 试了下 感觉差不多&#xff1a; html 版本 大致效果如下&#xff1a; 思路和 html 实现的类似&#xff1a; 也就是找出点的位置&#xff0c;使用二阶…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...