netlink socket

article/2025/9/11 12:15:54
#include <asm/types.h>
#include <sys/socket.h>
#include <linux/netlink.h>netlink_socket = socket(AF_NETLINK, socket_type, netlink_family);

1 netlink socket

NetLink被用于在内核和应用之前传输信息,在用户空间编程使用标准的socket相关的API接口,在内核空间使用kernel内部的API接口。

NetLink是一个面向数据报的服务,socket_type 可以是SOCK_RAW也可以是SOCK_DGRAM ,在netlink协议中不做区分。

netlink_family最常用的就是NETLINK_ROUTE用于网络相关的配置和NETLINK_KOBJECT_UEVENT用于设备热插拔监测。

2 socket 地址

struct sockaddr_nl {sa_family_t     nl_family;  /* AF_NETLINK */unsigned short  nl_pad;     /* Zero */pid_t           nl_pid;     /* Port ID */__u32           nl_groups;  /* Multicast groups mask */
};

使用socket通信肯定需要自身的地址和对方的地址。netlink socket使用struct sockaddr_nl作为通信的地址。

2.1 nl_pid

nl_pid是netlink socket的单播地址,类似于网络通信中的端口号,网络地址通常是ip+port,但是netlink是本地通信,所以有port就够了。

在netlink中,如果目的地址是内核,也就是说接收方是内核,那么目的地址的nl_pid就是0.

在用户空间,如果目的地址是应用程序,也就是说接收方是应用程序,那么目的地址的nl_pid通常是进程自己的PID号。但是比如在进程中创建多个netlink socktet,但是进程号是唯一的,多个socket不能使用相同的nl_pid,那么该怎么办,两个办法,在bind()调用之前,手动分配一个唯一的nl_pid或者将nl_pid设置为0,这样bind()的时候由内核自动分配一个唯一的nl_pid,和网络通信中的端口号非常像,就是手动指定和默认分配。

2.2 nl_groups

这个域类似于组播,就是内核会发送数据给一组net socketet,如果用户空间程序的netlink socket,在bind()的地址中的nl_groups指定了接收组,那就可以接收内核发送的数据,通俗的讲就是内核对多个应用通信,这个有什么用呢,非常有用,比如有硬件设备热插拔,内核可以发布这个消息到组,然后每一个bind()了这个组的应用程序,都可以接收热插拔消息。nl_groups更多时候就是用于用户程序监测内核事件,比如热插拔事件,网络管理事件等。每个socket 地址中接收32种组消息,因为nl_groups是32位数,每一位代表一个不同的组类型

比如想接收(监听)网卡事件和I地址变化,可以设置nl_groups =RTMGRP_LINK | RTMGRP_IPV4_IFADDR 。

参考链接

netlink(7) - Linux manual pageicon-default.png?t=L9C2https://man7.org/linux/man-pages/man7/netlink.7.html


http://chatgpt.dhexx.cn/article/ktAamKIQ.shtml

相关文章

Linux 网络之netlink 简介

文章目录 前言一、Netlink用户态应用的使用1.1 Netlink socket1.2 Netlink宏操作 二、Netlink对应数据结构2.1 struct sockaddr_nl2.2 struct nlmsghdr2.3 struct msghdr 三、Netlink内核态四、用户层实例参考资料 前言 The Netlink socket family 是一个 Linux 内核接口&…

netlink分析介绍

netlink socket是一种用于用户态进程和内核态进程之间的通信机制。它通过为内核模块提供一组特殊的API&#xff0c;并为用户程序提供了一组标准的socket接口的方式&#xff0c;实现了全双工的通讯连接。 特点&#xff1a; 双向传输&#xff0c;异步通信用户空间中使用标准soc…

netlink实现与使用方法详解(用户态/内核态)

一、什么是netlink Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。 在Linux 内核中&#xff0c;使用netlink 进行应用与内核通信的应用有很多&#xff0c;如 路由 daemon&#xff08;NETLINK_ROUTE…

火狐插件RESTClient测试接口

正文 {"username":"chen","password":"123"}后端 PostMapping("/login")ResponseBodypublic ReturnObj login(RequestBody JSONObject params) {String username params.getString("username");String passwor…

火狐插件

chrome插件要过墙啊好烦&#xff0c;老老实实用火狐吧&#xff0c;而且json样式也好看。 一.效果图 &#xff08;首页&#xff09; &#xff08;标签页&#xff09; &#xff08;搜索&#xff09; &#xff08;翻译&#xff09; 除此外还有一些乱七八糟的样式就不一一做展…

FireFox插件RESTClient

火狐FireFox插件RESTClient 一、功能二、安装三、使用说明 一、功能 使用FireFox插件RESTClient、HttpRequester模拟http(get post)请求 二、安装 1.点击火狐浏览器右侧按钮 2.进入获取附加组件页面 3.点击查看更多附加组件 4.右侧查找附件组件输入框&#xff0c;输入RES…

YApi 使用Firefox插件cross-request关于cookie的问题

环境信息 我用的Firefox目前是最新版本的&#xff0c;109.0.1 (64 位)版本。 cross-request插件就是打包的Firefox插件。 cookie的值是浏览器根据host的信息自己匹配上去的&#xff0c;属于浏览器的行为 cookie功能验证 我测试了一下&#xff0c;接口服务代码就是读取和写入coo…

介绍 GTK#

介绍 GTK# [ 纯Windows 用户就可以跳过。 也未测试。 ] GTK# 是对流行的跨平台图形用户界面库&#xff08;GUI&#xff09;GTK 的包装。如果打算构建一个本地应用程序&#xff0c;并想让它运行在非 Windows 平台上&#xff0c;GTK 可能是一个合理的选择。GTK# 的运行类似于…

gtk/gtk.h: no such file or directory

linux上运行创建界面的例程报错&#xff1a; 是因为没有安装 GTK。GTK 是 基于界面底层库 x11 的一个界面库&#xff0c;用于在 linux 系统中绘制窗口界面。 $ sudo apt-get install libgtk2.0-dev #安装gtk运行环境 $ sudo apt-get install gnome-devel #安装gtk开发环境…

GTK编程基础---入门篇(helloworld)

相关代码可以在github上下载&#xff1a;https://github.com/jin13417/GTK 下面来介绍GTK编程入门&#xff0c;你的第一个程序hellowoeld。直接通过程序来讲解吧。 /*File:helloworld.c*Date:2013-11-23*Author:sjin*Mail:413977243qq.com*//*my first test program*/ #includ…

GTK+ 3 基础知识学习

1.启动程序 以前的版本要写一个GTK程序都是按照以下流程 int main(int argc, char *argv[]) {GtkWidget *window;gtk_init(&argc,&argv);... ...gtk_main();return 0; } 现在最新的GTK 3.20的版本一般是按照以下格式初始&#xff0c;main函数里新建一个GtkApplicati…

GTK+系列---Windows下的GTK+开发平台搭建(Win7 64位)

注意&#xff1a;这些说明适用于希望基于GTK开发应用程序的开发人员&#xff0c;而不适用于终端用户。 必要条件 Windows版本&#xff1a;GTK需要Windows 7或更高版本。对于旧版本的Windows&#xff0c;您应该自定义构建旧版本的glib和gtk。 我的安装平台为win7_64位&#x…

GTK+开发环境搭建

一般讲到GUI程序开发&#xff0c;大家都会想到C等面向对象的高级语言&#xff0c;而认为C语言不能做界面。C语言也可以用来写界面&#xff0c;GTK就是一个用来写界面的库&#xff0c;它本身就是用C语言写的&#xff0c;而且实现了面向对象的设计。对于一个C语言程序员来说&…

GTK官方教程

前言&#xff1a; 让你在开发中爱不释手的 GT 包。关注GSLS官网&#xff0c;查看更多源码 ヾ(✿&#xff9f;▽&#xff9f;)ノ工具包。 所有文章 小编尽量让读者可以 直接 读懂 与 完全 复制粘贴&#xff0c;其中复杂或较多 的源码 会有 源码 并 贴上 github 网址。 GT 类 里面…

GTK+入门教程

GTK入门教程&#xff08;一&#xff09; 1. 显示一个窗口 #include <gtk/gtk.h>int main(int argc, char *argv[]) {GtkWidget *window;gtk_init(&argc, &argv);window gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_widget_show(window);g_signal_connect(window,…

学习使用GTK+

学习使用GTK 0.概述 原文地址&#xff1a;http://blog.programet.org/2010/08/gtk-0.html GTK是当下流行的图形界面库之一&#xff0c;使用GTK可以方便地构造出应用程序界面。叶子觉得GTK很好用&#xff0c;在这里推荐给大家&#xff0c;并留下自己的一些使用心得。希望你也喜欢…

GTK+:GTK+的简介、安装、使用方法之详细攻略

GTK&#xff1a;GTK的简介、安装、使用方法之详细攻略 目录 GTK的简介 1、GTK特点 GTK的安装 1、基于Windows平台安装 第一步、下载GTK 第二步、安装GTK 第三步、加载系统环境变量 第四步、运行命令测试 第五步、利用python预测测试 GTK的使用方法 1、C语言实现 2、…

【Linux】特别篇--GTK界面设计

【Linux】特别篇--GTK界面设计 一、GTK界面常用函数1、控件大小设置2、创建窗口3、创建控件&#xff08;1&#xff09;标签label&#xff08;2&#xff09;按键button&#xff08;3&#xff09;行辑器 二、GTK常用布局方法1、布局的使用方法&#xff08;以水平布局为例&#xf…

GTK入门教程

GTK入门教程 1.GTK简介 GTK&#xff08;GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的&#xff0c;已成为一个功能强大、设计灵活的一个通用图形库&#xff0c;是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。当然&#xff0c;…

gtk学习总结:GTK从入门到放弃,三天包教包会

今天花了一些时间复习之前学习过的gtk&#xff0c;感觉东西光学不用忘得好快啊&#xff0c;在这做个之前学过的内容的备份&#xff0c;希望对大家有用&#xff0c;也希望大家不要从入门到放弃。文中有些代码例子可能来自《GTK从入门到精通》吧&#xff0c;我不记得了&#xff0…