问题标签 [netlink]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
601 浏览

c - 在哪里可以找到例如 netlink 的源代码?

我想看一下netlink的那些API的定义,但是只能找到sys/socket.h、linux/netlink.h这样的头文件。我在哪里可以找到 .c 文件?

0 投票
1 回答
2888 浏览

c - 如何使用 netlink 库向网络接口发送命令

我正在启动与 wifi 相关的项目,并且我已经完成了一个使用 linux ioctl 调用的项目。现在我必须在 libnl 的帮助下做同样的事情,因为现在不推荐使用 ioctl,我已经阅读了所有核心文档,但仍然不明白如何在特定接口上发送命令。如何将命令发送到网络接口?说我想发送 NL80211_CMD_TRIGGER_SCAN,我该怎么做?非常感谢任何示例代码,因为它将是我旅程的开始。据我所知,我现在必须创建 libnl 套接字,例如:

然后用我的命令编写 nl_msg 消息并发送它,但是如何?

PS假设使用nl_send(),但我希望你明白我坚持不理解这个lib如何工作的想法

0 投票
1 回答
289 浏览

network-programming - 如何知道扫描何时完成

我使用以下代码触发扫描

现在,我应该如何知道扫描何时完成,以及如何获取它?到目前为止,在我搜索的所有地方,都有“您将收到关于“扫描”多播组的 NL80211_CMD_NEW_SCANS 通知”,我应该如何订阅它?我注册了我的回拨,试过了

然后在 while 中收听消息

但什么也没发生,所以:如果您有足够的耐心阅读到这一点,请帮我解决 2 个问题

1)我如何知道扫描何时完成(如何订阅此通知,或阅读它们等)

2)收到通知后如何阅读消息(我理解的方法如下)

要读取扫描的数据,我需要发送类似于触发扫描的消息,但使用消息 NL80211_CMD_GET_SCAN,之后数据将存储在 nl_socket 的有效负载中,对吗?

0 投票
2 回答
5314 浏览

linux - 使用 netlink inet_diag 进行实时套接字监控

我的目标是监视套接字并将它们与创建它们的应用程序相关联。
我知道 netstat、ss、lsof 等,他们可以列出所有套接字及其应用程序。
而且我也知道我可以解析/proc/net/tcp以获取套接字并将它们与应用程序相关联/proc/(PID),这正是这些工具所做的,或者它们使用 netlink 套接字。

我的研究使我看到了一篇文章,该文章解释了如何通过 inet_diag 协议使用 netlink 从内核获取所有套接字。用户空间程序建立一个 inet_diag 类型的 netlink 套接字并向内核发送请求。响应由几条消息组成,其中包含套接字和其他相关信息。
这真的很简洁,但不幸的是内核在每个请求中只发送一次这个信息。所以我必须不断地“投票”。

进一步的研究让我看到了另一篇文章,该文章使用 netlink 路由套接字持续监控接口的 IP 变化。套接字绑定到一个多播组,然后在无限循环中从中读取消息。

因此,我调查了 inet_diag 套接字是否存在相同的可能性。不幸的是,我并不能真正理解内核代码。但据我所知,这个套接字系列没有多播组。

在这一点上,我被困住了,我需要知道这种方法是否可行,或者有人知道任何其他提示。

0 投票
1 回答
1499 浏览

linux - Netlink 和安全如何相互作用?

我知道 Netlink 是在 Linux 中通信内核和用户空间的现代且正确的方式。

我有一个需要配置的内核模块,所以我使用 Netlink 让它与用户空间应用程序对话。

一切都很神奇,但在我看来,任何用户都可以与我的模块交谈。我可以使用权限等锁定应用程序,但该项目是开源的,因此任何用户都可以轻松编译用户空间应用程序。因此,任何用户都可以配置我的内核。这对我来说并不好。

似乎我在这里遗漏了一些非常重要的东西,但我找到的 Netlink 文档都是关于如何让它运行,而不是它如何适应现实世界。

如何限制对模块的 Netlink 套接字的访问?如果这是不可能的,还有什么可以做的呢?

0 投票
1 回答
813 浏览

sockets - 两个内核模块,每个都使用 netlink 套接字。如何同时使用它们?

再会。我想创建两个(几乎相同的)模块 - 每个模块都使用 netlink 套接字并回复来自用户空间程序的传入消息。

在第一个模块的初始化过程中,它成功执行了以下命令:

但是,如果我使用相同的参数启动第二个模块,相同的命令将导致错误。

我认为发生此错误是因为两个模块的 NETLINK_USER 值相同 - 31 - 这就是为什么我无法为同一个 netlink 用户创建第二个套接字连接。但是,如果我尝试将 NETLINK_USER 值设为 32,则会出现内核错误。任何其他值 - 错误也是如此。

请告诉我,我需要做什么才能同时使用两个内核模块?

0 投票
1 回答
2057 浏览

c - 通过 netlink 将结构从内核发送到用户空间

我正在尝试根据以下答案将结构从 LKM 发送到用户区: Netlink Sockets in C using the 3.X linux kernel

答案本身的代码是完全可编译的,但是当我尝试发送struct而不是 achar *时,我在用户空间中遇到了段错误。

这是我改变的:

netlinkKernel.c

我加:

并更换

netlinkUser.c

我添加相同的结构并替换

问题出在哪里?

0 投票
0 回答
311 浏览

linux - 使用 netlink 获取所有连接的 tcp_info?

是否有可能为TCP_INFOlinux 上的所有 tcp 连接获取带有 netlink 的结构?NETLINK_SOCK_DIAG似乎不包含该信息

如果不是 netlink,我还有什么其他选择?

0 投票
1 回答
529 浏览

c - 通过 NetLink 发送的数据大小

我正在尝试获取通过 NetLink(Linux 内核)发送的数据块的大小。我试过了size = nlh->nlmsg_len - NLMSG_HDRLEN,但没有返回正确的大小。获取消息数据大小的正确方法是什么?

0 投票
2 回答
1327 浏览

c - 尝试在 C 中编写 netlink 套接字程序时出错

首先,您可以从我以前的帖子中找到我的情况的详细信息

过去一天左右,我一直在尝试第一次尝试 netlink 套接字程序。

而且我并没有试图让它听起来好像我没有从我在互联网上找到的其他人的示例代码中获得所有这些代码,因为我们都知道我就是这样做的。

但是我一直在尝试通过代码对我的方式进行逆向工程(见结尾),经过数小时的调试,我终于让它编译没有错误。但是在尝试运行它之后,我收到消息“分段错误(核心转储)”。

现在我知道这个错误与尝试从无效的内存位置读取有关,但老实说,我不理解拼接在一起的一半代码,所以如果有人能指出我哪里出错了,我将不胜感激。

如果您能解释我在尝试通过一般的 netlink 套接字发送消息时做对/错的事情,我也将非常感谢您。例如,我会将消息放在哪里?因为我真的不知道我现在用我的代码原样发送什么消息。任何帮助表示赞赏!