linux netlink實現用戶態和內核態數據交互

1,內核態代碼

#include <linux/module.h>
#include <linux/netlink.h>
#include <net/sock.h>

#define NETLINK_TEST 31

struct sock *nl_sk = NULL;

static void nl_recv_msg(struct sk_buff *skb) {
??? struct nlmsghdr *nlh;
??? int pid;
??? char *msg;
?? ?
??? nlh = (struct nlmsghdr*)skb->data;
??? pid = nlh->nlmsg_pid; // 獲取發送者的 PID
??? msg = nlh->nlmsg_data;

??? printk(KERN_INFO "Received message: %s from pid: %d\n", msg, pid);

??? // 回復用戶空間
??? nlh->nlmsg_pid = 0; // 目標為用戶空間
??? nlh->nlmsg_type = NLMSG_DONE; // 消息類型
??? strcpy(nlh->nlmsg_data, "Hello from Kernel");
?? ?
??? netlink_unicast(nl_sk, skb, pid, MSG_DONTWAIT);
}

static int __init hello_init(void) {
??? struct netlink_kernel_cfg cfg = {
??????? .input = nl_recv_msg,
??? };

??? nl_sk = netlink_kernel_create(&init_net, NETLINK_TEST, &cfg);
??? if (!nl_sk) {
??????? printk(KERN_ALERT "Error creating netlink socket.\n");
??????? return -ENOMEM;
??? }
??? printk(KERN_INFO "Netlink module initialized.\n");
??? return 0;
}

static void __exit hello_exit(void) {
??? netlink_kernel_release(nl_sk);
??? printk(KERN_INFO "Netlink module exited.\n");
}

module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

運行insmod hello.ko

3,用戶態代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <linux/netlink.h>

#define NETLINK_TEST 31

int main() {
??? struct sockaddr_nl src_addr, dest_addr;
??? struct nlmsghdr *nlh = NULL;
??? int sock_fd, msg_size;
??? char *msg = "Hello from User";

??? sock_fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_TEST);
??? if (sock_fd < 0) {
??????? perror("socket");
??????? return -1;
??? }

??? memset(&src_addr, 0, sizeof(src_addr));
??? src_addr.nl_family = AF_NETLINK;
??? src_addr.nl_pid = getpid(); // 用于識別

??? bind(sock_fd, (struct sockaddr *)&src_addr, sizeof(src_addr));

??? memset(&dest_addr, 0, sizeof(dest_addr));
??? dest_addr.nl_family = AF_NETLINK;
??? dest_addr.nl_pid = 0; // 目標為內核
??? dest_addr.nl_groups = 0;

??? nlh = (struct nlmsghdr *)malloc(NLMSG_SPACE(1024));
??? nlh->nlmsg_len = NLMSG_LENGTH(strlen(msg) + 1);
??? nlh->nlmsg_pid = getpid();
??? nlh->nlmsg_flags = 0;
??? strcpy(NLMSG_DATA(nlh), msg);

??? msg_size = sendto(sock_fd, nlh, nlh->nlmsg_len, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
??? if (msg_size < 0) {
??????? perror("sendto");
??????? return -1;
??? }

??? // 接收內核的回復
??? recv(sock_fd, nlh, NLMSG_BUFFER_SIZE, 0);
??? printf("Received from kernel: %s\n", (char *)NLMSG_DATA(nlh));

??? close(sock_fd);
??? return 0;
}

gcc main.c -o main

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78373.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78373.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78373.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode:DP-多狀態問題

簡單 面試題 17.16. 按摩師 一個有名的按摩師會收到源源不斷的預約請求&#xff0c;每個預約都可以選擇接或不接。在每次預約服務之間要有休息時間&#xff0c;因此她不能接受相鄰的預約。給定一個預約請求序列&#xff0c;替按摩師找到最優的預約集合&#xff08;總預約時間最…

Spring AOP---面向切面編程由認識到使用

1. AOP AOP(Aspect-Oriented Programming), 是一種思想, 面向切面編程。 在前文統一異常處理&#xff0c;統一結果返回就是使用了這一思想&#xff08;都是在集中處理某一類事情, 但又不影響原有代碼的正常運行&#xff09;&#xff0c;但他們不是AOP&#xff0c;只是應用了這…

專題二十四:虛擬專用網絡

一、VPN簡介 VPN&#xff08;Virtual Personal Network&#xff09;即虛擬專用網&#xff0c;泛指通過VPN技術在公用網絡上構建的虛擬專用網絡。VPN用戶在此虛擬網絡中傳輸私網流量&#xff0c;在不改變網絡現狀的情況下實現安全、可靠的連接。其主要功能是在公用網絡上建立專…

Milvus(12):分析器

1 分析器概述 在文本處理中&#xff0c;分析器是將原始文本轉換為結構化可搜索格式的關鍵組件。每個分析器通常由兩個核心部件組成&#xff1a;標記器和過濾器。它們共同將輸入文本轉換為標記&#xff0c;完善這些標記&#xff0c;并為高效索引和檢索做好準備。 在 Milvus 中&a…

Power Query精通指南1:查詢結構設計、數據類型、數據導入與遷移(平面文件、Excel、Web)

文章目錄 零、Power Query簡介0.1 Power Query 主要功能0.2 Power Query 的優勢0.3 Power Query 組件 一、Power Query數據處理基本流程1.1 前期準備1.2 提取1.3 轉換1.3.1 Power Query 編輯器界面1.3.2 默認轉換1.3.3 自定義轉換 1.4 加載1.4.1 自動檢測數據類型1.4.2 重命名查…

WebRTC 服務器之Janus概述和環境搭建

1 概述 Janus 是由 Meetecho 開發的通用 WebRTC 服務器&#xff0c;它為構建 WebRTC 應用程序提供了一個模塊化框架。服務器目標&#xff1a;Janus WebRTC 網關被設計為輕量級、通用的 WebRTC 服務器&#xff0c;除了實現以下方法外&#xff0c;它本身不提供任何功能&#xff1…

19:常見的Halcon數據格式

遍歷文件夾與文件選擇 1&#xff09;遍歷文件夾&#xff1a; list_files( : : Directory, Options : Files) Directory&#xff1a;目錄&#xff08;文件夾路徑&#xff09; Options&#xff1a;選項 files 指定搜索的格式為文件 directories 指定搜索的格式為文件夾 re…

QML圖像提供器 (Image Provider)

QML 中的圖像提供器是一種自定義圖像加載機制&#xff0c;允許你從非文件源&#xff08;如數據庫、網絡或程序生成的內容&#xff09;提供圖像數據。 主要類型 QQuickImageProvider - 基礎圖像提供器 QPixmapImageProvider - 提供 QPixmap 圖像 QImageImageProvider - 提供 …

計算機視覺與深度學習 | 雙目立體匹配算法理論+Opencv實踐+matlab實踐

雙目立體匹配 一、雙目立體匹配算法理論與OpenCV、matlab實踐一、雙目立體匹配理論二、OpenCV實踐三、優化建議四、算法對比與適用場景二、雙目立體匹配算法理論及Matlab實踐指南一、雙目立體匹配理論二、Matlab實踐步驟三、算法對比與優化建議四、完整流程示例五、常見問題與解…

AI國學智慧語錄視頻,條條視頻10W+播放量

家人們&#xff01;圖書類帶貨玩法真的非常多&#xff0c;之前也分享過蠻多&#xff0c;例如情感語錄、育兒教育、爆款圖書金句類、AI歷史人物解說類等等。 本期繼續來分享一個對于普通人來說&#xff0c;上手相當簡單&#xff0c;容易起號&#xff0c;可作為長線深耕的AI帶貨…

echart圖表使用

2、接口編寫 該部分代碼定義了UserController控制器類&#xff0c;用于處理與用戶相關的請求。包含一個用于跳轉頁面的方法和一個返回用戶詳細數據&#xff08;以 JSON 格式呈現&#xff09;的接口。前者負責將用戶導航至指定頁面&#xff0c;后者通過構建ChartVO對象并填充數…

Android短信監控技術實現:合法合規的遠程采集方案

一年經驗的全棧程序員&#xff0c;目前頭發健在&#xff0c;但不知道能撐多久。 該項目已成功部署并穩定運行于企業生產環境&#xff0c;如需個性化定制方案&#xff0c;歡迎聯系作者進行深度合作。 文章目錄 前言 一、頁面設計 1.頁面顯示 2.代碼實現 二、具體代碼實現 1.添加…

前端跨域問題怎么在后端解決

目錄 簡單的解決方法&#xff1a; 添加配置類&#xff1a; 為什么會跨域 1. 什么是源 2. URL結構 3. 同源不同源舉&#x1f330; 同源例子 不同源例子 4. 瀏覽器為什么需要同源策略 5. 常規前端請求跨域 簡單的解決方法&#xff1a; 添加配置類&#xff1a; packag…

【中間件】brpc_基礎_execution_queue

execution_queue 源碼 1 簡介 execution_queue.h 是 Apache BRPC 中實現 高性能異步任務執行隊列 的核心組件&#xff0c;主要用于在用戶態線程&#xff08;bthread&#xff09;中實現任務的 異步提交、有序執行和高效調度。 該模塊通過解耦任務提交與執行過程&#xff0c;提…

java學習之數據結構:一、數組

主要是對數組所有的東西進行總結&#xff0c;整理 適合小白~ 目錄 1.什么是數組 1.1數組定義 1.2數組創建 1&#xff09;靜態創建 2&#xff09;動態創建 1.3數組遍歷 1&#xff09;for和while遍歷 2&#xff09;foreach遍歷 2.數組越界問題及解決 2.1數組越界問題 2…

[Survey]SAM2 for Image and Video Segmentation: A Comprehensive Survey

BaseInfo TitleSAM2 for Image and Video Segmentation: A Comprehensive SurveyAdresshttps://arxiv.org/abs/2503.12781Journal/Time2503Author四川大學&#xff0c;北京大學 1. Introduction 圖像分割專注于識別單個圖像中的目標、邊界或紋理&#xff0c;而視頻分割則將這…

用Maven定位和解決依賴沖突

用Maven定位和解決依賴沖突 一、依賴沖突的常見表現二、定位沖突依賴的4種方法2.1 使用Maven命令分析依賴樹2.2 使用IDE可視化工具2.3 使用Maven Enforcer插件2.4 運行時分析 三、解決依賴沖突的5種方案3.1 排除特定傳遞依賴3.2 統一指定版本&#xff08;推薦&#xff09;3.3 使…

穿越數據森林與網絡迷宮:樹與圖上動態規劃實戰指南

在 C 算法的浩瀚宇宙中&#xff0c;樹與圖就像是神秘的迷宮和茂密的森林&#xff0c;充滿了未知與挑戰。而動態規劃則是我們探索其中的神奇羅盤&#xff0c;幫助我們找到最優路徑。今天&#xff0c;就讓我們一起深入這片神秘領域&#xff0c;揭開樹與圖上動態規劃的神秘面紗&am…

UDP / TCP 協議

目錄 一、前言&#xff1a; 數據封裝與分用&#xff1a; 二、網絡協議分層模型&#xff1a; 三、UDP / TCP 協議 UDP 協議&#xff1a; 1、UDP 協議段格式&#xff1a; 2、UDP 的特點&#xff1a; TCP 協議&#xff1a; 1、TCP 協議段格式&#xff1a; 2、TCP 協議的十…

Python 實現的運籌優化系統數學建模詳解(動態規劃模型)

相關代碼鏈接&#xff1a;https://download.csdn.net/download/heikediguoshinib/90713747?spm1001.2014.3001.5503 一、引言 在計算機科學與數學建模的廣闊領域中&#xff0c;算法如同精密的齒輪&#xff0c;推動著問題的解決與系統的運行。當面對復雜的優化問題時&…